java的子類
① java定義類和子類中的方法
你好:
首先是Parents類
publicclassParents{
privateStringname;
privateintage;
publicParents(Stringname,intage){
this.name=name;
this.age=age;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
}
然後是Father類,添加了工作方法
{
privateStringfavor;
privateStringwork;
publicFather(Stringname,intage,Stringfavor,Stringwork){
super(name,age);
this.favor=favor;
this.work=work;
}
publicvoidsetFavor(Stringfavor){
this.favor=favor;
}
publicStringgetFavor(){
returnfavor;
}
publicStringgetWork(){
returnwork;
}
publicvoidsetWork(Stringwork){
this.work=work;
}
voidSys(){
System.out.println("我是父親,我的名字是"+this.getName()+",我的年齡是"+this.getAge()+"歲,我的愛好是"+this.getFavor());
}
/**
*工作
*/
publicvoidwork(){
System.out.println("我是父親,我的工作是"+this.getWork());
}
}
② java 小問題 子類的子類是父類的子類還是間接子類
子類的子類依然是也是父類的子類
就如同object這個根類,它是一切類的父類。
所以無論中間跨越多少級,都算是子類,只是分為間接子類和直接子類
③ java編程的填空題,java中所有類都是( )類的子類
java編程的填空題,java中所有類都是Object類的子類。
當編輯並運行一個Java程序時,需要同時涉及到這四種方面。使用文字編輯軟體或集成開發環境在Java源文件中定義不同的類,通過調用類中的方法來訪問資源系統,把源文件編譯生成一種二進制中間碼。
存儲在class文件中,然後再通過運行與操作系統平台環境相對應的Java虛擬機來運行class文件,執行編譯產生的位元組碼,調用class文件中實現的方法來滿足程序的Java API調用。
(3)java的子類擴展閱讀:
自增和自減是單目運算符,可以放在操作元之前,也可以放在操作元之後。操作元必須是一個整型或浮點型變數。自增、自減運算符的作用是使變數的值增1或減1。
放在操作元前面的自增、自減運算符,會先將變數的值加1或減1,然後再使該變數參與表達式的運算。放在操作元後面的自增、自減運算符,會先使變數參與表達式的運算,然後再將該變數的值加1或減1。
④ Java 如何實現子類之間的類型轉換
C類提供一個以B類類型為參數(或其中一個參數是B類類型)的構造器,當滿足特定的條件時,以B類對象為實參,構造一個C類對象。即:
C(B b)
{
}
B b=new B(...);
C cfromb=new C(b);
⑤ 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調用)。
後面還有匿名內部類,有興趣可以網路一下了解了解。
⑥ java子類
default就是沒有任何訪問許可權修飾符的數據默認的就是包訪問許可權修飾符,也就是當前包中的所有類都可以訪問它,但是包外不可以
也就是說 不同包的子類,父類的default數據是不可以訪問的 要訪問需要protected修飾符
==============================
我說的你沒看懂嗎?父類的default是不可以訪問的,要訪問必須的是protected。你那個default是包訪問許可權啊,除非同包才能訪問,跟你import沒一點關系啊,你說的完全是兩回事啊
⑦ JAVA中「子類」是什麼
子類是相對與父類來說的,也是一個類,但是他自己不用聲明就可以用有一些父類的屬性,就跟兒子繼承父親的東西一樣,所以稱為子類~
⑧ java中子類和子類型的區別
子類化(subclass) 和 子類型化(subtype)的區別[原創,未經作者許可不得轉載]
subtype具有更加嚴格的要求,就是父類的任何子類都可以在運行時可無縫的代替父類的工作,子類的介面具有更加相比父類更加強的前置條件,父類的介面在子類中得到繼承,並且不得在子類中修改父類方法的簽名.子類型化的好處是實現依賴倒置,參見參考讀物的Bicycle一圖,
subclass主要目的為了更加方便的重用,通常不需要符合Is-a的要求,如果採用組合,那麼必須手寫大量介面,然後Delegate給這個成員變數,如果父類很大的話,使用組合需要大量的工作量,而採用繼承則方便很多,另外通過繼承可以訪問protected的成員及其方法,這也是組合所不具備的。
⑨ 在java 中,什麼叫父類,什麼叫子類
父類和子類,就例如:老子和兒子,有著父子關系。而這里指的父子關系,其實也就是一種包含關系。打個比方,在我們現實生活中,學生Student是一個很大的概念,而U_Student大學生是屬於學生中的一種,這里的學生即為父類,大學生即為子類。
父類和子類區別在哪?
學生和大學生都會有學習Study這個方法,但是大學生還會有自己特有的Study方法,兩者還是有一定區別的,大學生的學習相較於其他學生來說,是更自由的。假如現在已經有一個學生(Student)類,然後我還要寫一個大學生(U_Student)類,然後大學生UStudent類里有很多方法和Student里的方法都相同,但是還是有一小部分不同,怎樣解決呢?難道還要重新寫一個大學生類,並且重復敲一遍和學生類中一樣的代碼嗎?那樣浪費了時間和精力,並且浪費了存儲空間,是很不劃算的。所以,就有了「繼承」。
子類繼承父類,就是子類能引用父類中的某些東西。繼承的關鍵字是extends,
例如:
public class Student(){}//父類
public class U_Student extends Student(){}//子類繼承了父類
當子類和父類用一個同名方法,但是子類的實現卻和父類不同,用到"方法重寫"。
重寫是指方法定義相同,但是實現不同,存在於父子類之間。
例如:
//父類
public class Student(){
//學習方法
public void study(){
System.out.println("我通過聽老師講課學習");
}
}
//子類
public class UStudent extends Student(){
public void study(){
System.out.println("我通過自習去學習");
}
}
⑩ 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;
}
}