java重寫父類
A. java子類重寫父類帶泛型的方法
特殊變數
* 使用特殊變數super提供對父類的訪問
* 可以使用super訪問父類被子類隱藏的變數或覆蓋的方法
* 每個子類構造方法的第一條語句都是隱含的調用super,如果父類沒有這種形式的構造函數就會報錯.
code:
class Animal
{
int height,weight;
Animal()
{
System.out.println("Animal construct");
}
void eat()
{
System.out.println("Animal eat!");
}
void sleep()
{
System.out.println("Animal sleep!");
}
void breathe()
{
System.out.println("Animal breathe!");
}
}
class Fish extends Animal
{
Fish()
{
System.out.println("Fish construct");
}
void breathe() //override method breathe()
{
System.out.println("Fish bubble");
}
}
class DoMain
{
public static void main(String[] args)
{
//Animal an=new Animal();
Fish fn=new Fish();
//an.breathe();
//fn.breathe();
//fn.height=30;
//fn.weight=20;
}
}
輸出結果:
F:\Java Develop>javac Animal.java
F:\Java Develop>java DoMain
Animal construct
Fish construct
必須重寫才能使用搜索
B. java中重寫方法中調用父類的屬性
哥們你看好了,我和你一樣也是初學者,你的問題,也是前幾天我的問題;
這玩意我在Java群裡面也問過,搞了十年Java的也說不出個123來還動用了什麼debug測試工具,當然這個玩意以後我們也會用到!
我告訴你步驟怎麼回事:
當你newY的時候,注意,還沒有產生對象的時候,就執行了一個動作就是載入CLASS文件這個動作!
class文件已載入,就開始動用分配內存的動作,懂??
3.此時分配的對象有,方法區,父類方法,和子類方法:(這里說的覆蓋其實只是就近原則而已,其實沒有覆蓋如果你不理解,你可以看看Java內存分析)
4.還分配了成員變數,在堆裡面分配,注意:(堆內存,分配了子類和父類變數其實都有的,是劃分開的切記:兩個類裡面的i都給劃分了空間)
5.此時堆內存的所有變數,都是默認值,int就是0;這個步驟稱為:隱式初始化!以上是載入class後就發生的動作懂了?
6.然後子類繼承了父類,父類動作必然先執行父類裡面的構造函數,開始執行初始化動作
(注意:構造函數是用來初始化動作的,能給本類對象初始化,也能給子類對象初始化切記!)
7.父類,啟用構造函數先把自己的i=2給賦值完畢(顯示初始化動作);
就開始執行構造函數裡面的其他語句;這里就是你寫的那個方法display();
父類讀這個方法的時候,回去方法區裡面找方法,他優先找子類,如果子類沒有,在找他自己的,此刻子類是有的,也稱之為覆蓋
(說明一下,其實父類方法也在的)
8.此刻調用的子類方法,子類裡面調用了i,(此時父類的i已經是2了,但是子類i還是0,懂了?但是方法找變數的時候會優先找子類懂了?當然k也是0了)
9.父類讀完你這個調用以後就會把子類所有的成員變數初始化完成,稱之為(顯示初始化動作,就是我們能看的見的數字)
10.如果你在new完成以後,你在調用,你會發現,都是有值的了!
11.補充下:哥們純手工靠記憶敲打出來的;
這個是我個人糾結了好幾天以後總結的,總結的不到位還請指點,有大佬指引我,遇見這問題可以先記起來,以後學到多線程,很容易就可以理解!
祝你Java越來越厲害,順便也期望我也一樣吧,呵呵!!
C. JAVA中子類重寫父類的方法,怎麼寫,什麼要求
只要保證子類與父類中方法原型一致、返回類型和訪問修飾符不低於父類就行了,不需要任何關鍵字
public class Base(){
public void print(){
System.out.println("這是Base類的方法!");
}
}
public class Sub extends Base(){
public void print(){
System.out.println("這是Sub類重寫後的方法!");
}
}
D. java中子類重寫父類方法後能在子類的對象中使用父類的方法嗎如果能,怎麼使用
可以使用super調用,具體代碼:
classParent{
publicvoidprint(){
System.out.println("Parent");
}
}
classChildextendsParent{
@Override
publicvoidprint(){
//調用父類print
super.print();
System.out.println("Child");
}
}
publicclassApp04{
publicstaticvoidmain(String[]args){
Childc=newChild();
c.print();
}
}
執行結果:
E. JAVA繼承,子類覆蓋重寫父類方法
抽象方法你是怎麼直接new出來的
F. 在java中子類怎麼重寫父類帶的方法(用到父類的屬性)
子類繼承父類之後只能重寫父類中的protected和public方法,默認沒有修飾詞的是friendly,同樣可以重寫,但是private方法就不能重寫,即使子類中的方法名和父類的private方法一致,也只能看做是一個新的方法,而不是重寫。
override也就是重寫,覆寫
G. java中子類重寫(覆蓋)父類是什麼意思直接刪除父類嗎
class A { //父類A
public void print(String s) { //父類帶參數的方法
System.out.println(s);
}
A () { //父類構造方法
print("父類構造方法A()");
}
public void f() { //父類無參方法
print("父類無參方法f()");
}
}
public class B extends A{ //子類
B() {
//Super();相當於省略了這一句話 調用了父類里的無參構造方法
print("B()");
}
public void f() { //子類重寫父類方法
print("B:f()");
}
public static void main(String[] args) {
B b = new B();
b.f();
/*最後輸出A();B();B:f();
* 分析:先從主方法開始 實例化對象 b 因為B子類繼承了父類A B沒有使用Super關鍵字
* 所以B的構造方法也調用了A的無參構造方法 也就是父類里的A()
* 所以會先列印出A() 然後再列印出B構造方法 里的東西B()
* 最後對象引用 b.f() 調用了B的f()方法 重寫了父類的B的f() 所以最後列印出B:f()
*/
}
}
H. java中關於重寫父類方法的問題
我來解答吧。首先,兩個對象是否相同主要是比較兩個對象的hashcode是否相同的,equals方法就是通過比較hashcode來判斷兩個對象是否相同的。hashset有元素不能重復的特性,我想它內部實現應該是在你往裡添加元素時,他就會調用equals方法來逐個比較,看他們的hashcode是否相同,相同就重復了。這並不矛盾!!!
關於tostring方法,列印對象就是列印tostring的內容,不要問為什麼,就是這樣。
I. java重寫能重寫父類的成員變數嗎
重寫和重載是針對方法的
子類的變數可以覆蓋父類的變數,但是不能改變父類的變數