JAVA继承类phone_JAVA(9)继承与多态
繼承與多態(tài) 、抽象類、接口
繼承:
繼承是類與類的一種關(guān)系
java中的繼承是單繼承
繼承的好處:
子類擁有父類的所有屬性和方法。(修飾符不能是private)
實(shí)現(xiàn)代碼的復(fù)用
語法規(guī)則:
class ?子類 ?extends 父類 {
......
}
java中的方法重寫:
如果子類對繼承父類的方法不滿意,是可以重寫父類的方法的,當(dāng)調(diào)用方法時會優(yōu)先調(diào)用子類的方法。
語法規(guī)則:
返回值類型、方法名、參數(shù)類型及個數(shù) 都要與父類繼承的方法相同,才叫方法的重寫。
java中的繼承初始化順序
初始化父類再初始化子類
先執(zhí)行初始化對象中的屬性,再執(zhí)行構(gòu)造方法中的初始化
java中的final的使用
final關(guān)鍵字做標(biāo)識有“最終的”含義。
final可以修飾類、方法、屬性、變量
final修飾類,則該類不能被繼承
final修飾方法,則該方法不允許被覆蓋(重寫)
final修飾屬性,則該類的屬性不會進(jìn)行隱式的初始化(類的初始化屬性必須有值)或在構(gòu)造方法中賦值(但只能選其一)
final修飾變量,則該變量的值只能賦一次值,即變?yōu)槌A?/p>
java中的super的使用
super關(guān)鍵字:
在對象的內(nèi)部使用,可以代表父類對象。
1、訪問父類的屬性
super.age
2、訪問父類的方法
super.eat();
子類的構(gòu)造的過程當(dāng)中必須調(diào)用其父類的構(gòu)造方法。(隱式使用了super)
如果子類的構(gòu)造方法中沒有顯示調(diào)用父類的構(gòu)造方法,則系統(tǒng)默認(rèn)調(diào)用父類無參的構(gòu)造方法。
如果顯示的調(diào)用構(gòu)造方法,必須在子類的構(gòu)造方法的第一行。
如果子類構(gòu)造方法中既沒有顯示調(diào)用父類的構(gòu)造方法,而父類又沒有無參的構(gòu)造方法,則編譯出錯。
java中的object類
object類是所有類的父類,如果一個類沒有使用extend是關(guān)鍵字明確標(biāo)識繼承另外一個類, 那么這個類默認(rèn)繼承object類。
object類中的方法,適合所有子類。
object類的幾個重要方法:
1、toString()方法
在Object類里面定義toString()方法的時候返回的對象的哈希code碼(對象地址字符串)
可以通過重寫toString()方法表示出對象的屬性
2、equals()方法
比較的是對象的引用是否指向同一塊內(nèi)存地址。
Dog dog = new Dog();
一般情況下比較兩個對象時比較他的值是否一致,所以要進(jìn)行重寫。
Java中的多態(tài)
繼承是多態(tài)實(shí)現(xiàn)的基礎(chǔ)
對象的多種形態(tài)
引用多態(tài):
父類的引用可以指向本類的對象
父類的引用可以指向子類的對象
Animal obj1 = new Animal();
Animal obj2 = new Dog();
方法多態(tài):
創(chuàng)建本類對象時,調(diào)用的方法為本類方法
創(chuàng)建子類對象時,調(diào)用的方法為子類重寫的方法或者繼承的方法
多態(tài)中的引用類型轉(zhuǎn)換:
向上類型轉(zhuǎn)換(隱式/自動類型轉(zhuǎn)換),是小類型到大類型的轉(zhuǎn)換
Dog dog = new dog();
Animal animal = dog;
向下類型轉(zhuǎn)換(強(qiáng)制類型轉(zhuǎn)換),是大類型到小類型(存在風(fēng)險)
Dog dog2 = animal;(不可以轉(zhuǎn)換);
Dog dog2 = (Dog)animal;(可以,強(qiáng)制內(nèi)型轉(zhuǎn)換)
instanceof運(yùn)算符,來解決引用對象的類型,避免類型轉(zhuǎn)換的安全性問題
if(animal ?instanceof Cat ){
Cat cat = (Cat) animal;
}else{
……
}
java中的抽象類
語法定義:
抽象類前使用abstract關(guān)鍵字修飾,則該類為抽象類。
應(yīng)用場景:
a、在某些情況下,某個父類只是知道其子類應(yīng)該包含怎樣的方法,但無法
準(zhǔn)確知道這些子類如何實(shí)現(xiàn)這些方法。(約束子類有哪些方法,并不關(guān)注如何實(shí)現(xiàn)的)
b、從多個具有相同特征的類中抽象出一個抽象類,以這個抽象類作為子類的模板,從而避免了子類設(shè)計(jì)的隨意性
作用:
限制規(guī)定(約束)子類必須實(shí)現(xiàn)某些方法,但不關(guān)注實(shí)現(xiàn)細(xì)節(jié)
使用規(guī)則:
a、abstract定義抽象類
b、abstract定義抽象方法、只有聲明,不需要實(shí)現(xiàn)
c、包含抽象方法的類是抽象類
d、抽象類中可以包含普通的方法、也可以沒有抽象方法
e、抽象類不能直接創(chuàng)建、可以定義引用變量
父類文件
// 抽象類 -- 父類
public abstract class TelPhone {
// abstract定義抽象方法、只有聲明,不需要實(shí)現(xiàn)
public abstract void call();
public abstract void sendMsg();
}
子類文件
public class CellPhone extends TelPhone {
public void call() {
System.out.println("打電話");
}
public void sendMsg() {
System.out.println("發(fā)短信");
}
}
java中的接口
接口的概念:
接口可以理解為一種特殊的類,由全局常量和公共的抽象方法所組成。
類是一種具體實(shí)現(xiàn)體,而接口定義了某一批類所需要遵守的規(guī)范,接口不關(guān)心這些類的內(nèi)部數(shù)據(jù),也不關(guān)心這些類里方法的實(shí)現(xiàn)細(xì)節(jié),它只規(guī)定這些類里必須提供某些方法。
接口的定義:
和類定義不同,定義接口不再使用class關(guān)鍵字,而是使用interface關(guān)鍵字
接口定義的基本語法:
[修飾符] ?interface ?接口名 [extends 父接口1,父接口2...]
{
零個到多個常量定義。。。
零個到多個抽象方法的定義。。。
}
接口就是用來被繼承、被實(shí)現(xiàn)的、修飾符一般建議使用public
注意:不能使用private和protected修飾接口
接口定義:
1、常量:接口中的屬性是常量,即使定義時不添加public static final 修飾符,系統(tǒng)也會自動加上
2、方法:接口中的方法只能是抽象方法,即使定義時不添加public static final 修飾符,系統(tǒng)也會自動加上
使用接口:
一個類可以實(shí)現(xiàn)一個或多個接口實(shí)現(xiàn)接口使用implements關(guān)鍵字,java中一個類只能繼承一個父類,是不夠靈活的,通過實(shí)現(xiàn)多個接口可以補(bǔ)充。
繼承父類實(shí)現(xiàn)接口的語法為:
【修飾符】class 類名 extends ?父類 ?implements ?接口1,接口2....
{
類體部分// 如果繼承了抽象類,需要實(shí)現(xiàn)繼承的抽象方法;要實(shí)現(xiàn)接口中的抽象方法。
}
//如果要繼承父類,繼承父類必須在實(shí)現(xiàn)接口之前
總結(jié)
以上是生活随笔為你收集整理的JAVA继承类phone_JAVA(9)继承与多态的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java编写抓取用户信息代码_[代码全屏
- 下一篇: java中gc是啥_java的gc是什么