java类继承语法_java类的继承(基础)
---恢復(fù)內(nèi)容開始---
這篇隨筆和大家講講java中類的繼承是什么?希望對(duì)你們有所幫助。
目錄
一、java繼承是什么?
二、為什么使用java繼承
三、java繼承的實(shí)現(xiàn)
1.1? java繼承的基本語(yǔ)法
1.2? super的用法
一、Java繼承是什么?
簡(jiǎn)單來(lái)講,Java中的繼承是一個(gè)對(duì)象獲取父對(duì)象的所有屬性和行為的機(jī)制。它是面向?qū)ο缶幊滔到y(tǒng)(OOP)的重要組成部分。Java中繼承的思想是,創(chuàng)建基于現(xiàn)有類的新類。從現(xiàn)有類中繼承,可以重用父類的方法和字段。此外,還可以在當(dāng)前類中添加新方法和字段
繼承表示IS-A關(guān)系,也稱為父子關(guān)系。
二·、為什么使用繼承?
繼承就是 比如,你和你的父親,你可以繼承你父親身上的基因,但繼承基因的同時(shí)你可以除了繼承你父親基因的同時(shí)再創(chuàng)造新的基因,就比如你父親不高,但是你想變高,就可以在基礎(chǔ)的同時(shí)使用重寫來(lái)改變你的身高。
那為什么要使用繼承呢?
1、可以實(shí)現(xiàn)方法重寫(這樣可以實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)性)。提高了代碼的復(fù)用性。
2、繼承允許我們重用代碼,它提高了Java應(yīng)用程序的可重用性。
三、繼承的實(shí)現(xiàn)
1.java繼承的基本語(yǔ)法
1 packagepkg12;2 //Son是子類 ,Father是父類 所以就是子類繼承(extends)父類
3 public class Son extendsFather{4 //方法......
5
6 }
如果要繼承一個(gè)類的話,就要使用extends關(guān)鍵字
提示:繼承按時(shí)著成員在派生類中課訪問(wèn),而不是僅僅限于當(dāng)前定義的類,要在包含基類的包的外部派生一個(gè)類,這個(gè)基類就必循聲明為public ,如果沒(méi)有聲明為public 這個(gè)類就不能直接地?cái)U(kuò)展到包的外部。
2、繼承的特點(diǎn):
子類會(huì)把父類所以的屬性和方法都繼承下來(lái)。(先不考慮final)
如果父類包含了共同的屬性和方法,我們可以使用繼承來(lái)設(shè)計(jì)程序
子類使用extends關(guān)鍵字繼承父類的共同屬性以外,子類話可以有自己特有的屬性和方法。
父類更通用,子類更具體。
子類只能獲得父類中的非private的屬性,如果想要繼承就得提供公共的set和get的方法,私有的方法是無(wú)法繼承的。
用一個(gè)習(xí)題,來(lái)解釋一下什么叫做繼承,代碼如下:
1 packagepkg11;2
3 //定義了一個(gè)老師類 同時(shí)都有兩個(gè)屬性和兩個(gè)方法
4 classTeachJava{5 String name;6 intage;7
8 public voidTeachJava(){9 System.out.println(this.name+"在上java課");10 }11 public voidsleep(){12 System.out.println(this.name+"在休息");13 }14 }15
16
17 //定義了二個(gè)老師類 同時(shí)都有兩個(gè)屬性和兩個(gè)方法
18 classTeachHtml{19 String name;20 intage;21 public voidTeachHtml(){22 System.out.println(this.name+"在上Html課");23 }24 public voidsleep(){25 System.out.println(this.name+"在休息");26 }27 }28
29
30 public classTextExtends{31 public static voidmain(String args[]){32 //實(shí)例化出第一個(gè)老師
33 TeachJava tj = newTeachJava();34 tj.name = "張三";35 tj.age = 18;36 tj.TeachJava();37 tj.sleep();38 //實(shí)例化出第二個(gè)老師
39 TeachHtml th = newTeachHtml();40 th.name = "李四";41 th.age = 34;42 th.TeachHtml();43 th.sleep();44 }45 }
運(yùn)行效果:
看到我們定義兩個(gè)老師類,大家有沒(méi)有發(fā)現(xiàn)一個(gè)問(wèn)題呢?就是我定義了兩個(gè)老師類, 兩個(gè)老師類里面發(fā)現(xiàn)兩個(gè)相同的屬性和一個(gè)方法 ,這時(shí)我們就可以采用繼承的方式來(lái)設(shè)計(jì)這個(gè)案例。
那我們應(yīng)該怎么設(shè)計(jì)呢? 遵循上面說(shuō)到的繼承語(yǔ)法:子類 繼承 父類。
1 packagepkg11;2 //我們可以把相同的屬性和方法放在一個(gè)類中,定義為 父類3
4 //父類
5 classTeacher{6 String name;7 intage;8
9 public voidsleep(){10 System.out.println(this.name+"在睡覺(jué)");11 }12 }13
14 //子類15
16
17 //子類 繼承 父類
18 class TeachJava extendsTeacher{19 public voidTeachJava(){20 System.out.println(this.name+"在講java課程");21 }22 }23
24 //子類 繼承 父類
25 class TeachHtml extendsTeacher{26
27 public voidTeachHtml(){28 System.out.println(this.name+"在講HTML課程");29 }30 }31
32 public classTextExtends1{33 public static voidmain(String args[]){34 TeachJava tj = newTeachJava();35 tj.name = "張三";//調(diào)用父類中的屬性36 tj.age = 20;37 tj.TeachJava();//釣魚自己的方法38 tj.sleep();//調(diào)用父類的方法。39 TeachHtml th = newTeachHtml();40 th.name="李四";//調(diào)用父類中的屬性41 th.age = 25;42 th.TeachHtml();//調(diào)用自己的方法43 th.sleep();//調(diào)用父類的方法。44 }
45 }
兩個(gè)老師類的中重復(fù)的屬性和方法,我沒(méi)個(gè)把他歸結(jié)為一個(gè)類當(dāng)中作為?父類,因?yàn)槲覀兝^承的父類的屬性和方法,所以我們就有和父類相同的屬性和方法,所以繼承的最明顯的優(yōu)點(diǎn)就是減少了代碼的重復(fù)性。
這樣繼承和我們之前寫的代碼運(yùn)行效果會(huì)一樣嗎?運(yùn)行效果如下:
子類只能獲得父類中的非private的屬性,如果想要繼承就得提供公共的set和get的方法,私有的方法是無(wú)法繼承的。
這句特點(diǎn)要這樣理解呢? 為什么說(shuō)要繼承就的使用set和get方法呢?先看代碼:
packagepkg11;//我們可以把相同的屬性和方法放在一個(gè)類中,定義為 父類//父類
classTeacher{privateString name;intage;public voidsleep(){
System.out.println(this.name+"在睡覺(jué)");
}
}//子類//子類 繼承 父類
class TeachJava extendsTeacher{public voidTeachJava(){
System.out.println(name+"在講java課程");
}
}//子類 繼承 父類
class TeachHtml extendsTeacher{public voidTeachHtml(){
System.out.println(this.name+"在講HTML課程");
}
}public classTextExtends1{public static voidmain(String args[]){
TeachJava tj= newTeachJava();
tj.name= "張三";
tj.age= 20;
tj.TeachJava();
tj.sleep();
TeachHtml th= newTeachHtml();
th.name="李四";
th.age= 25;
th.TeachHtml();
th.sleep();
}
}
在我父類屬性中加了一個(gè)private,這樣我們?cè)龠\(yùn)行運(yùn)行程序看看會(huì)發(fā)生什么?
這里發(fā)生了報(bào)錯(cuò),都在name的報(bào)錯(cuò),所以上面的特點(diǎn) 說(shuō)的真是這點(diǎn)私有的方法是無(wú)法繼承的。
如果想在繼續(xù)繼承父類的話,那么我們就的使用封裝的方法,get和set
1 //父類
2 classTeacher{3 privateString name;4 intage;5
6 //封裝
7 public voidsetName(String name){8 this.name =name;9 }10 public voidgetName(){11 returnname;12 }13 public voidsleep(){14 System.out.println(this.name+"在睡覺(jué)");15 }16 }
之后調(diào)用方法就可以進(jìn)行繼承了。1 packagepkg11;2 //我們可以把相同的屬性和方法放在一個(gè)類中,定義為 父類3
4 //父類
5 classTeacher{6 privateString name;7 intage;8
9 //封裝
10 public voidsetName(String name){11 this.name =name;12 }13 public voidgetName(){14 returnname;15 }16 public voidsleep(){17 System.out.println(this.name+"在睡覺(jué)");18 }19 }20 //子類21 //子類 繼承 父類
22 class TeachJava extendsTeacher{23 public voidTeachJava(){24 System.out.println(this.getName+"在講java課程");25 }26 }27 //子類 繼承 父類
28 class TeachHtml extendsTeacher{29
30 public voidTeachHtml(){31 System.out.println(this.getName()+"在講HTML課程");32 }33 }34 public classTextExtends1{35 public static voidmain(String args[]){36 TeachJava tj = newTeachJava();37 //tj.getName = "張三";
tj.getName("張三");38 tj.age = 20;39 tj.TeachJava();40 tj.sleep();41 TeachHtml th = newTeachHtml();42 //th.getName="李四";
th.getName("李四");43 th.age = 25;44 th.TeachHtml();45 th.sleep();46 }47 }
運(yùn)行效果:
以上繼承是單一繼承,java還有多極繼承
多級(jí)繼承: 在多級(jí)繼承中,派生類將繼承基類,并且派生類也充當(dāng)其他類的基類。在下面的圖像中,類A用作派生類B的基類,后者又用作派生類C的基類。在Java中,類不能直接訪問(wèn)祖父母的成員。
就是可以繼承多個(gè)
packagepkg11;//多極繼承
classA{
}class B extendsA{
}class C extendsB{
}public classTextExtends1{public static voidmain(String args[]){
}
}
運(yùn)行效果:
但是不支持多繼承,它可以支持繼承多個(gè)類,但不支持同時(shí)繼承兩個(gè)類。
這樣是不支持的
1 packagepkg11;2 //錯(cuò)誤展示
3
4 classA{5
6 }7
8 classB{9
10 }11
12 class C extendsA,B{13
14 }15
16 public classTextExtends3{17 public static voidmain(String args[]){18
19 }20 }
運(yùn)行效果:
總結(jié):
繼承的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):1、代碼共享,減少創(chuàng)建類的工作量,每個(gè)子類都擁有父類的方法和屬性。
2、提高代碼的重用性,子類可以形似父類,但又異于父類。
3、提高代碼的可擴(kuò)展性。
缺點(diǎn):
1、只要繼承,就必須擁有父類的所有屬性和方法;
2、降低代碼的靈活性。子類必須擁有父類的屬性和方法,讓子類多了約束;
3、增強(qiáng)了耦合性,當(dāng)父類的常量、變量和方法被修改時(shí),需要考慮子類的修改,而且在缺乏規(guī)范的環(huán)境下,修改可能會(huì)造成嚴(yán)重的后果。
總結(jié)
以上是生活随笔為你收集整理的java类继承语法_java类的继承(基础)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java applet退出功能_java
- 下一篇: 天文学专业在什么时候学计算机,南京大学在