Java面向?qū)ο缶幊讨惖睦^承詳解
本文實例講述了Java面向?qū)ο缶幊讨惖睦^承。分享給大家供大家參考,具體如下:
繼承:特殊類擁有一般類的全部屬性與行為。
繼承好處:
1.提高了代碼的復(fù)用性
2.讓類與類之前產(chǎn)生了關(guān)系,有了這個關(guān)系才有多態(tài)的特性。繼承是類和類之前的關(guān)系。
注意事項:
1.java只支持單繼承,不支持多繼承。因為多繼承有安全隱患:當(dāng)多個父類定義相同的函數(shù),但是功能不同時,子類不知道運行哪一個。
2.子類繼承父類時,繼承了父類的所有方法和屬性,可直接使用。
3,java支持多層繼承,即:孫-子-父的關(guān)系
語法:
[類修飾符] class 子類名 extends 父類名{ 語句; }
例如:
class Pserson { int age; String name; public void speak() { System.out.println("Hello World!"); } } //繼承Person類,繼承了父類所有方法和屬性 class Student extends Pserson { public void study() { System.out.println("Good Study!"); } } //繼承Person類,繼承了父類所有方法和屬性 class Worker extends Pserson { public void work() { System.out.println("Good work!"); } }
如何使用一個繼承體系中的功能(查閱api文檔):
查閱父類的功能,創(chuàng)建子類對象使用功能
在繼承過程中經(jīng)常遇到這三種場景:
1)同名變量
1.如果子類出現(xiàn)非私有的同名成員變量時,子類訪問本類的變量,用this;子類訪問父類中的同名變量,用super。
2.this代表本類對象的引用
3.super代表父類對象的引用(用法和this相同)
2)同名函數(shù)
1.如果子類出現(xiàn)和父類一模一樣的函數(shù)時(函數(shù)名和參數(shù)都相同),當(dāng)子類對象調(diào)用該函數(shù),會運行子類函數(shù)內(nèi)容。,父類的函數(shù)會被覆蓋(也叫重寫)。
2.重寫定義:當(dāng)子類繼承父類,沿襲了父類的功能,到子類中。但子類雖具備該功能,但功能的內(nèi)容和父類不一致,這時,沒有必須要定義新功能,而是使用覆蓋特性,保留父類的功能定義,并重寫功能內(nèi)容。
3.重寫(覆蓋)注意事項:
<1>子類覆蓋父類,必須保證子類的權(quán)限大于等于父類的權(quán)限,才能繼承,否則編譯失敗。(public>不寫修辭關(guān)鍵詞>private)
<2>靜態(tài)只能覆蓋靜態(tài)
<3>重載:只看同名函數(shù)的參數(shù)列表 重寫:子父類方法要一模一樣(函數(shù)名和參數(shù)列表)
class Fu { //public void show() 當(dāng)父類為show()時,會和子類函數(shù)一模一樣,父類的show函數(shù)會被重寫 public void show(String name) //父類的show函數(shù)和子類不一樣(參數(shù)列表不一樣),因此父類的show函數(shù)不會被重寫 { System.out.println(name); } } class Zi extends Fu { public void show() { System.out.println("zi"); } } class Jicheng { public static void main(String[] args) { Zi z1=new Zi(); z1.show("nihao");//會調(diào)用父類的show函數(shù) } }
3)構(gòu)造函數(shù)
1.在對子類對象進行初始化時,父類的構(gòu)造函數(shù)也會運行,因為子類的構(gòu)造函數(shù)的第一行默認(rèn)有一條隱式語句super()
2.super()會訪問父類中空參數(shù)的構(gòu)造函數(shù),而且子類中所有的構(gòu)造函數(shù)第一行默認(rèn)都是super()
3.子類一定要訪問父類構(gòu)造函數(shù)原因
<1>因為父類中的數(shù)據(jù)子類可以直接獲取,所以子類在創(chuàng)建是,先看看父類如何對這些數(shù)據(jù)進行初始化的,所以子類在對象初始化時,默認(rèn)先訪問父類的構(gòu)造函數(shù)。
<2>若要訪問父類制定的構(gòu)造函數(shù)或者父類沒有空參數(shù)的構(gòu)造函數(shù)時,可以通過手動定義super語句的方式來制定。
<3>當(dāng)然子類的構(gòu)造函數(shù)第一行也可以手動指定this語句來訪問本類的構(gòu)造函數(shù),但子類中至少有一個構(gòu)造函數(shù)會訪問父類的構(gòu)造函數(shù)
class Fu { String name; int age; Fu(){System.out.println("Hello Fu");} Fu(String name) { System.out.println(name); } Fu(String name,int age) { this.name=name; this.age=age; System.out.println("name: "+name+",age: "+age); } } class Zi extends Fu { //Zi(){System.out.println("Hello Zi");} 默認(rèn)先會調(diào)用父類的無參構(gòu)造函數(shù) Zi() { super("zhangsan",20);//手動用super語句指定父類的構(gòu)造函數(shù),來獲取父類非私有的信息 System.out.println(name+"::"+age); } } class Test { public static void main(String[] args) { Zi z1=new Zi(); } }
構(gòu)造函數(shù)異常例子:
寫出程序結(jié)果
class Super { int i=0; public Super(String s) { i=1; } } class Demo extends Super { public Demo(String s) { i=2; } public static void main(String[] args) { Demo d=new Demo("yes"); System.out.println(d.i); } } //編譯失敗,因為父類中缺少空參數(shù)的構(gòu)造函數(shù)。 //或者子類應(yīng)該通過super語句指定要調(diào)用的父類中的構(gòu)造函數(shù)。
重寫和重載例子:
class Demo { int show(int a,int b){return 0;} }
下面那些函數(shù)可以存在于Demo的子類中。
A.public int show(int a,int b){return 0;}//可以,覆蓋。
B.private int show(int a,int b){return 0;}//不可以,權(quán)限不夠。
C.private int show(int a,long b){return 0;}//可以,和父類不是一個函數(shù)。沒有覆蓋,相當(dāng)于重載。
D.public short show(int a,int b){return 0;}//不可以,因為該函數(shù)不可以和給定函數(shù)出現(xiàn)在同一類中,或者子父類中。
E.static int show(int a,int b){return 0;}//不可以,靜態(tài)只能覆蓋靜態(tài)。<br><br>因此子類允許重寫和重載。
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計入門與進階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
在IntelliJ IDEA中為自己設(shè)計的類庫生成JavaDoc的方法示例
這篇文章主要介紹了在IntelliJ IDEA中為自己設(shè)計的類庫生成JavaDoc的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08如何使用Java 8 中的 Stream 遍歷樹形結(jié)構(gòu)
這篇文章主要介紹了使用Java 8中的Stream遍歷樹形結(jié)構(gòu),我們可以使用Java8中的Stream流一次性把數(shù)據(jù)查出來,然后通過流式處理,我們一起來看看,代碼實現(xiàn)為了實現(xiàn)簡單,就模擬查看數(shù)據(jù)庫所有數(shù)據(jù)到List里面,需要的朋友可以參考下2023-08-08Spring Boot集成netty實現(xiàn)客戶端服務(wù)端交互示例詳解
這篇文章主要給大家介紹了關(guān)于Spring Boot集成netty實現(xiàn)客戶端服務(wù)端交互的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12利用java、js或mysql計算高德地圖中兩坐標(biāo)之間的距離
最近因為工作的需求,需要計算出高德地圖中兩個坐標(biāo)的距離,通過查找相關(guān)資料發(fā)現(xiàn)了多種實現(xiàn)的方法,下面這篇文章主要給大家介紹了關(guān)于利用java、js或mysql計算高德地圖中兩坐標(biāo)之間距離的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-10-10java中獲取當(dāng)前服務(wù)器的Ip地址的方法
本篇文章主要介紹了java中獲取當(dāng)前服務(wù)器的Ip地址的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02GC調(diào)優(yōu)實戰(zhàn)之高分配速率High?Allocation?Rate
這篇文章主要為大家介紹了GC調(diào)優(yōu)之高分配速率High?Allocation?Rate的實戰(zhàn)示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-01-01