㈠ 關於java 的繼承問題,子類會繼承父類的哪些東西
和C++類似,可以繼承基類的公共屬性和方法。
在Java繼承里,父類的屬性還有方法在聲明時,如果是public關鍵字即公共屬性,則在子類繼承時,這些屬性和方法都會被子類繼承。受保護的也可以繼承
但是私有的類屬性成員和方法則無法繼承。
.子類繼承父類的成員變數
當子類繼承了某個類之後,便可以使用父類中的成員變數,但是並不是完全繼承父類的所有成員變數。具體的原則如下:
1)能夠繼承父類的public和protected成員變數;不能夠繼承父類的private成員變數;
2)對於父類的包訪問許可權成員變數,如果子類和父類在同一個包下,則子類能夠繼承;否則,子類不能夠繼承;
3)對於子類可以繼承的父類成員變數,如果在子類中出現了同名稱的成員變數,則會發生隱藏現象,即子類的成員變數會屏蔽掉父類的同名成員變數。如果要在子類中訪問父類中同名成員變數,需要使用super關鍵字來進行引用。
2.子類繼承父類的方法
同樣地,子類也並不是完全繼承父類的所有方法。
1)能夠繼承父類的public和protected成員方法;不能夠繼承父類的private成員方法;
2)對於父類的包訪問許可權成員方法,如果子類和父類在同一個包下,則子類能夠繼承;否則,子類不能夠繼承;
3)對於子類可以繼承的父類成員方法,如果在子類中出現了同名稱的成員方法,則稱為覆蓋,即子類的成員方法會覆蓋掉父類的同名成員方法。如果要在子類中訪問父類中同名成員方法,需要使用super關鍵字來進行引用。
㈡ Java 子類繼承父類,子類重寫父類方法,這種情況下父類可以獲取到子類的數據嗎
在父類中能獲取子類的屬性嗎?一般情況下是不行的,因為孩子尚未出世哪裡來的屬性。但有時需要在父類處理該類(包含子類)的所有屬性,該怎麼做呢,有種方法能解決——在父類中將子類的實例引用進來。假設BaseClass是基類,有個getAll方法用以獲取該類的所有屬性。SubClass繼承子BaseClass,SSClass繼承自SubClass,SSClass的實例調用getAll方法時獲取SSClass及其父類的所有屬性。具體做法如下:
import java.lang.reflect.Field;
public class BaseClass {
private String a;
private int b;
// public BaseClass() {
// bc = setBC();
// }
private final BaseClass bc = setBC();
private BaseClass setBC() {
return this;
}
public void getAll() {
Class clazz = this.bc.getClass();
do {
Field[] fields = clazz.getDeclaredFields();
for (Field f : fields) {
System.out.println(f.getName());
}
clazz = clazz.getSuperclass();
} while (clazz != Object.class);
}
}
這里BaseClass bc就是子類的引用,構造子類SubClass或SSClass實例時,調用setBC方法將子類的引用獲得。setBC中return this這里的this是子類的實例,不是父類的。setBC也可以在父類構造函數中調用,效果是一樣的,如上面代碼的注釋塊。
子類就不用關心任何事了,不管它是否有自己的構造方法:
public class SubClass extends BaseClass {
@ShareObject
private boolean c;
}
public class SSClass extends SubClass {
private String ss;
public SSClass(int i) {
ss = "";
}
}
測試:
@Test public void get() {
SSClass sc = new SSClass(1);
sc.getAll();
}
輸出內容:
ss
c
a
b
bc
㈢ Java 子類一旦繼承父類後,子類的所有對象也都成為父類的對象了
子類的對象實例都可以用父類的變數去引用。具體來說,假設Son類繼承了Father類。則可以有:
FatherobjRef=newSon(...);
SonsonRef=(Son)objRef;
我們用new關鍵字建造了一個新的Son類對象實例,然後用一個Father類的引用去指向它;這時我們透過objRef這個引用,看到的就好像是一個Father類對象,只能使用Father類有的方法和屬性。當然, 因為objRef指向的其實是一個Son類實例,因此可以藉助強制類型轉換將一個Son類的引用去指向它,然後就可以使用Son類獨有的方法和屬性了。
㈣ Java中子類繼承父類到底是不是相當於直接復制父類的代碼,請各位高人務必慎重回答,免得小弟誤解
老爹將畢生所學的技能傳授於兒子,兒子在「繼承」到了,便可以使用了。兒子所使用的技能是他自己從他老子那裡學來的,不是他老子的。有時候,老爹覺得有些技能「不好」或者是兒子目前所不需要的,那麼不打算把這些技能傳授於兒子(private)。因此,兒子是不會知道如何使用這些技能的。不過,兒子有時候也會覺得老子某些技能不好用,然後加以改進(覆蓋)。當然,兒子沒准也會自創一些技能,這些技能是他老子都不會的。
㈤ 關於java繼承的描述錯誤的是
關於Java繼承的描述中可能存在的錯誤信息包括:
為了更好地理解這些概念,我們可以使用Java中的示例代碼來說明。例如,假設我們有一個父類Animal和一個子類Dog,Dog繼承了Animal的所有公有和受保護方法,並可以選擇性地覆蓋它們。這樣,我們就可以創建Dog對象並使用它們的方法,同時保留Animal類的所有公共和受保護成員。
以下是一個示例代碼:
class Animal { public void eat() { System.out.println("Animal is eating"); } } class Dog extends Animal { @Override public void eat() { System.out.println("Dog is eating"); super.eat(); // 調用父類的eat方法 } }
在這個例子中,Dog類繼承了Animal類的eat方法並提供了自己的實現,但還調用了父類的eat方法以保留Animal類的功能。這些都是Java繼承的基本原理和特性。
總的來說,Java繼承提供了一種強大的機制,使得我們可以將代碼組織成層次結構,並使代碼更加清晰和可維護。
㈥ 在java中子類若要繼承父類,需要使用的關鍵字是什麼
關鍵字是extends,
語法結構:[修飾符] class <子類類名> <父類類名>{
·····//類體定義
}
super 是用來指明調用的內是父類方法或指明操作的容是父類的屬性,而不是被子類覆蓋的成員方法或被子類隱藏的屬性。
this代表的是當前對象自身。
介面的定義的關鍵字是interface。實現的關鍵字是implements
㈦ JAVA中,子類將繼承父類的所有屬性和方法么~為什麼
是的來,子類將繼承父類的非私有的自屬性和方法。
在JAVA中,子類繼承父類的所有方法和屬性(構造方法要用關鍵super([參數])調用);繼承是JAVA中一個重要的特色,便於程序的編寫,提高代碼的重用性。
1、如果給子類i提供get和set 通過get調用的自然是子類的。
2、如果給父類和子類分別提供get和set,調的仍然是子類的,因為方法被重寫。
(7)java繼承父類子類擴展閱讀
在繼承中用到super調用父類的構造
private String name;
private String sex;
public xinxin1(String name,String sex)
{
this.name=name;
this.sex=sex;
}
public void hello(){
System.out.println(「嗨!我是」+name+」我是」+sex+」孩」);
}