java類的子類
A. java中,子類將繼承父類的所有屬性和方法么~為什麼
是的,子類將繼承父類的非私有的屬性和方法。
在JAVA中,子類繼承父類的所有方法和屬性(構造方法要用關鍵super([參數])調用);繼承是JAVA中一個重要的特色,便於程序的編寫,提高代碼的重用性。
1、如果給子類i提供get和set通過get調用的自然是子類的。
2、如果給父類和子類分別提供get和set,調的仍然是子類的,因為方法被重寫。
(1)java類的子類擴展閱讀
在繼承中用到super調用父類的構造
privateStringname;
privateStringsex;
publicxinxin1(Stringname,Stringsex)
{
this.name=name;
this.sex=sex;
}
publicvoidhello(){
System.out.println(「嗨!我是」+name+」我是」+sex+」孩」);
}
B. java什麼是繼承什麼是父類什麼是子類
繼承是面向對象的三大特徵之一,直接說定義不好理解,我打個比方吧,現在需要男人,女人,老人,小孩4個類,每個類都有很多屬性,而且有一部分相同的屬性,例如每個人都有身高,體重等等,我們就可以提取這些相同的部分,建立一個新的類:人類,然後把公共的屬性寫在人類里,用其他4個來繼承人類,其他4個類就不需要寫這些屬性,而是可以直接調用這些屬性。
我這個例子,人類就是父類,其他4個類繼承人類,所以是人類的子類!
C. JAVA的單繼承中允許一個父類有多個子類嗎
java中對於繼承,java只支持單繼承。java雖然不直接支持多繼承,但是保留了這種多繼承機制,進行改良。
單繼承:一個類只能有一個父類。
多繼承:一個類可以有多個父類。
為什麼不支持多繼承呢?
因為當一個類同時繼承兩個父類時,兩個父類中有相同的功能,那麼子類對象調用該功能時,運行哪一個呢?因為父類中的方法中存在方法體。
但是java支持多重繼承。A繼承BB繼承CC繼承D。
多重繼承的出現,就有了繼承體系。體系中的頂層父類是通過不斷向上抽取而來的。它裡面定義的該體系最基本最共性內容的功能。
所以,一個體系要想被使用,直接查閱該系統中的父類的功能即可知道該體系的基本用法。那麼想要使用一個體系時,需要建立對象。建議建立最子類對象,因為最子類不僅可以使用父類中的功能。還可以使用子類特有的一些功能。
簡單說:對於一個繼承體系的使用,查閱頂層父類中的內容,創建最底層子類的對象。
子父類出現後,類中的成員都有了哪些特點:
1:成員變數。
當子父類中出現一樣的屬性時,子類類型的對象,調用該屬性,值是子類的屬性值。
如果想要調用父類中的屬性值,需要使用一個關鍵字:super
This:代表是本類類型的對象引用。
Super:代表是子類所屬的父類中的內存空間引用。
注意:子父類中通常是不會出現同名成員變數的,因為父類中只要定義了,子類就不用在定義了,直接繼承過來用就可以了。
D. 怎麼分java中的主類和子類
好像只有父類和子類吧。extends前面的類叫父類,extends後面的叫子類,二者是繼承關系。整個程序只有一個主方法,就是main方法。但是類有很多。
E. java什麼叫子類
父子類:存在繼承關系,關鍵字extends,例如你說的:classSonextendsFather{Stringname;}兒子是父親的一個子類,是兩個獨立的類,只是子類繼承父類的成員變數和成員方法
內部類:與繼承無關,是定義在一個類內部的類,可以看成是類的一部分,分為:
例如:classFather{{}}這個表示「父親的衣服FatherClother」定義在父親類裡面(沒有繼承關系),並繼承衣服類Clother(有繼承關系)
此時「父親的衣服類」可以看成是父親類的一個一個成員變數,但他們沒有繼承關系,可以寫成:Father.FatherCloter,而那個「.」,表示成員運算符表示FatherClother是Father的一個成員,就像上面Son類中的Son.name一樣,但是我們不能寫成Father.Son。
所以樓主說的「classa1extendsa2{}那麼a1是a2的子類嗎?」是對的。
「我們寫B1.B2.C3(中間是點號)的時候,就表示c3是b2的子類,b2是b1的子類?」不是子類,是內部類
「那classa1{classa2{}}這樣a2也是a1的子類嗎?也可以寫成a1.a2?」不是子類,是內部類
內部類在解決這樣的問題的時候,很有用(當然只是一個方面,還有別的用處):
一個介面A中有p()方法,一個類B中也有p()方法,那麼我想讓這個介面被B實現,然後調用p()方法(B類中的p()方法,我不想覆蓋),但是我們調用的哪個?
此時我們可以在B的內部聲明一個內部類C,讓C去實現A介面,然後調用B中原有的p()方法,可以用B的對象b.p(),調用介面中被實現的p()方法,可以b..c.p()(c是類C的一個實例)
繼承,太熟悉了,熟悉到都不知道說什麼了,只能想到這么一句:繼承意味著基於一個已經定義好的類創建一個新的類,新的類將以某種方式擴展原有的類,可以認為就是一個類得到另一個類所有屬性的過程(構造函數木有被繼承,但子類可以通過super調用)。
後面還有匿名內部類,有興趣可以網路一下了解了解。
F. Java中怎樣獲取一個類的所有子類
1、面向對象思想的繼承是子類繼承父類,父類被其它子類繼承在JAVA虛擬機的容器中並沒有直接介面獲取;
2、如果是在一個項目內獲取父類的子類繼承情況,參考這個代碼:
packagefind;
importjava.io.File;
importjava.io.IOException;
importjava.net.URL;
importjava.util.ArrayList;
importjava.util.List;
importfind.test.Intf;
importfind.test.Man;
publicclassClassUtil{
publicstaticvoidmain(String[]args){
try{
System.out.println("介面實現類:");
for(Class<?>c:getAllAssignedClass(Intf.class)){
System.out.println(c.getName());
}
System.out.println("子類:");
for(Class<?>c:getAllAssignedClass(Man.class)){
System.out.println(c.getName());
}
}catch(ClassNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
/**
*獲取同一路徑下所有子類或介面實現類
*
*@paramintf
*@return
*@throwsIOException
*@throwsClassNotFoundException
*/
publicstaticList<Class<?>>getAllAssignedClass(Class<?>cls)throwsIOException,
ClassNotFoundException{
List<Class<?>>classes=newArrayList<Class<?>>();
for(Class<?>c:getClasses(cls)){
if(cls.isAssignableFrom(c)&&!cls.equals(c)){
classes.add(c);
}
}
returnclasses;
}
/**
*取得當前類路徑下的所有類
*
*@paramcls
*@return
*@throwsIOException
*@throwsClassNotFoundException
*/
publicstaticList<Class<?>>getClasses(Class<?>cls)throwsIOException,
ClassNotFoundException{
Stringpk=cls.getPackage().getName();
Stringpath=pk.replace('.','/');
ClassLoaderclassloader=Thread.currentThread().getContextClassLoader();
URLurl=classloader.getResource(path);
returngetClasses(newFile(url.getFile()),pk);
}
/**
*迭代查找類
*
*@paramdir
*@parampk
*@return
*@throwsClassNotFoundException
*/
privatestaticList<Class<?>>getClasses(Filedir,Stringpk)throwsClassNotFoundException{
List<Class<?>>classes=newArrayList<Class<?>>();
if(!dir.exists()){
returnclasses;
}
for(Filef:dir.listFiles()){
if(f.isDirectory()){
classes.addAll(getClasses(f,pk+"."+f.getName()));
}
Stringname=f.getName();
if(name.endsWith(".class")){
classes.add(Class.forName(pk+"."+name.substring(0,name.length()-6)));
}
}
returnclasses;
}
}