繼承 : extends
語法 子類的名字 extends 父類的名字
父親
```
public class Uncle {
private String name ;
private int age ;
public void Hongbao() {
System.out.println("舅舅要發(fā)紅包");
}
}
```
子類二:
```
package edu.xcdq;
public class UncleOne extends Uncle {
public void chouyan(){
System.out.println("大舅抽煙");
}
public void Hongbao(){
System.out.println("大舅家道中落,發(fā)不起紅包,該送祝福了");
}
}
```
子類二 :
1 子類能夠繼承到父類所有的不是私有的屬性 和 方法
2 子類能夠復(fù)寫父類的方法 如果沒有復(fù)寫,調(diào)用的是父類的方法 , 子類一旦復(fù)寫,優(yōu)先調(diào)用復(fù)寫后的子類方法
優(yōu)點(diǎn):
1 實(shí)現(xiàn)代碼的復(fù)用
2 有利于子類代碼的擴(kuò)展
多成繼承
```
public class Uncle {
private String name ;
private int age ;
public void Hongbao() {
System.out.println("舅舅要發(fā)紅包");
}
}
public class UncleOne extends Uncle {
public void chouyan(){
System.out.println("大舅抽煙");
}
public void Hongbao(){
System.out.println("大舅家道中落,發(fā)不起紅包,該送祝福了");
}
}
package edu.xcdq;
public class UncleOneSon extends UncleOne {
public void Hongbao(){
System.out.println("大舅的兒子厲害了 ,接著發(fā)紅包");
}
}
```
類繼承的加載順序
先加載父類,再加載子類
祖先類的構(gòu)造方法最先執(zhí)行,祖先類最先被創(chuàng)造出來,其次是父類,最后是子類
在構(gòu)造方法中會隱性的調(diào)用super()超類 父類地?zé)o參構(gòu)造方法
final 最終的 最后的
被final修飾的成員不可以被改寫
1final 修飾的變量值不能發(fā)生修改 pl = 3.1415
修飾基本數(shù)據(jù)類型, 其值不能發(fā)生改變,修改引用數(shù)據(jù)類型,例如數(shù)組 ,數(shù)組名不能指向新的空間
2 final 修飾的方法不能被重寫
3 final 修飾的類 不能被繼承
多態(tài)
一個父類有多個子類
把子類的對象賦值給父類的過程叫做向上轉(zhuǎn)型
把父類的對象賦值給子類的過程叫做向下轉(zhuǎn)型
語法:
正常語法:
類名 對象名 = new 類名();
向上轉(zhuǎn)型
子類類型 對象名 = new 子類的對象
向下轉(zhuǎn)型 :
子類類型 對象名 = (子類類型 ) 父類的對象
//向上轉(zhuǎn)型
UncleOne uncleOne1 = new UncleOne();
uncleOne1.faHongbao();
UncleTwo uncleTwo2 = new UncleTwo();
uncleTwo2.faHongbao();
//向下轉(zhuǎn)型
Uncle uncle = new Uncle();
UncleOne temp = (UncleOne) uncle;
instanceof 判斷引用類型是否一致
判斷對象是否是一個類的實(shí)例(具體的對象)
package com.company;
public class Demo02 {
public static void main(String[] args) {
UncleOne dajiu = new UncleOne();
ganHuo(dajiu);
UncleTwo erjiu = new UncleTwo();
ganHuo(erjiu);
}
public static void ganHuo( Uncle uncle ) {
if ( uncle instanceof UncleOne ) {
System.out.println("出門外干活");
}else if (uncle instanceof UncleTwo) {
System.out.println("在室內(nèi)干活");
}else {
System.out.println("傳進(jìn)來的不是舅舅,老太太沒辦法指使");
}
}
}