子類繼承父類的功能? ? **extends? 父類的名稱**
舉例:人 ==》 男人 女人? ? 打工人 ==》 經(jīng)理 老板
父類 舅舅
```java
public class Uncle {
? ? private String name;
? ? private int age;
? ? // getter? setter
? ? public void setName (String name) {
? ? ? ? this.name = name;
? ? }
? ? public String getName() {
? ? ? ? return name;
? ? }
? ? public void setAge(int age) {
? ? ? ? this.age = age;
? ? }
? ? public int getAge() {
? ? ? ? return age;
? ? }
? ? // 發(fā)紅包
? ? public void sendHongbao() {
? ? ? ? System.out.println("舅舅在發(fā)紅包");
? ? }
}
```
子類:大舅
```java
public class UncleOne extends Uncle{
? ? public void chouyan(){
? ? ? ? System.out.println("大舅喜歡抽煙");
? ? }
}
```
子類:二舅
```java
public class UncleTwo extends Uncle{
? ? public void drinkWine() {
? ? ? ? System.out.println("二舅喜歡喝酒");
? ? }
}
```
**子類只能繼承自一個(gè)父類蹋偏,不能繼承多個(gè)父類**? 多重繼承(不允許)
```java
// 錯(cuò)誤代碼
public class UncleThree extends Uncle , UncleOne{
}
```
子類 多層繼承
```java
// 多層繼承
public class UncleOneSon extends UncleOne{
}
```
# 在繼承中類加載的順序
先創(chuàng)建父類乙漓,再創(chuàng)建子類
父類的構(gòu)造方法先于子類的構(gòu)造方法調(diào)用
```java
? ? public UncleOne() {
? ? ? ? super();? // 調(diào)用父類的構(gòu)造方法
? ? ? ? System.out.println("子類大舅的構(gòu)造方法被創(chuàng)建了");
? ? }
```
# 方法的復(fù)寫(覆寫)override
```java
? ? @Override
? ? public void sendHongbao() {
? ? ? ? System.out.println("大舅家道中落捏雌,紅包只有1毛錢");
? ? }
```
如果子類沒(méi)有復(fù)寫父類的方法朱转,調(diào)用的是父類的
如果復(fù)寫了父類的方法萧恕,在調(diào)用時(shí)優(yōu)先調(diào)用子類復(fù)寫后的方法
**要求**
1 方法的簽名完全一致
2 方法體不同
# Final
1 修飾的內(nèi)容不可以發(fā)生改變
1.1 修飾的是基本數(shù)據(jù)類型漾狼,其值不可以發(fā)生改變
1.2 修飾的是引用數(shù)據(jù)類型,引用的地址不能發(fā)生改變(不能指向新的空間)今阳,但是原本引用的空間中的值是可以發(fā)生修改的