DAY08 復習
1.繼承中變數的使用
如果父類的成員變數與子類的成員變數同名時,使用super.變數名指定父類的成員變數
2.繼承中構造方法的使用
- 我們每次創建物件的時候,都會先觸發建構式
- 創建子類物件時,會先呼叫父類的無參構造,因為子類的建構式中默認存在一個super();
- 如果父類沒有無參構造的話,我們就需要手動指定子類去呼叫父類的含參構造super(引數);
- 構造方法不可以被繼承,原因是:構造方法名必須是本類的類名,不可能在子類中存在一個父類名字的構造方法
3.方法的重寫
重寫:子類對父類的方法不滿意時,可以重寫父類的方法
注意:重寫是在不改變父類方法的前提下,實作功能的修改與拓展,重寫后子類物件呼叫的就是重寫后的功能
原則:兩同 兩小 一大
兩同:方法名+引數串列相同
一大:子類方法的修飾符權限 >= 父類方法的修飾符權限
兩小:子類方法的回傳值型別,有兩種選擇:
1)子類方法的回傳值型別是父類方法的回傳值型別的子類
2)子類方法的回傳值型別與父類方法的回傳值型別相同
比如:父:void 子:void
父:int 子:int 但是:byte short long都不行!沒有繼承關系
父:Animal 子:Animal/Cat都可以,但不可以是Car
我們還可以給方法上加@Override注解,標記這是一個重寫的方法
package cn.tedu.review;
/本類用于復習方法的重寫/
//重寫的原則:
//兩同:方法名與引數串列
//兩小:方法的回傳值型別 屬于 父類方法回傳值型別的子類/保持一致
//一大:方法的修飾符 >= 父類方法的修飾符
public class TestExtends {
public static void main(String[] args) {
//4.創建兩個類的物件
Father f = new Father();
Son s = new Son();
//5.1測驗重寫的方法第1組
f.eat();
s.eat();
//6.3測驗重寫的方法第2組
f.sleep(6);
s.sleep(8);
//7.3測驗重寫的方法第3組
int a = f.play();
System.out.println("從父類方法中接收到的回傳值:"+a);
int b = s.play();
System.out.println("從子類方法中接收到的回傳值:"+b);
//8.4試重寫的方法第4組
Animal a2 = f.getPet();
System.out.println(a2.name);
Dog d2 = s.getPet();
System.out.println(d2.name);
}
}
//1.創建父類
class Father{
//3.1添加父類的方法
public void eat(){
System.out.println("爸爸愛吃肉");
}
//6.1添加父類的方法
public void sleep(int n){
System.out.println("爸爸晚上睡"+n+"個小時");
}
//7.1定義父類中的方法
public int play(){
System.out.println("爸爸在玩風箏");
return 666;
}
//8.2定義父類中的方法
public Animal getPet(){
Animal a = new Animal();
return a;
}
}
//2.創建子類
class Son extends Father{
//3.2子類重寫父類對應的方法
@Override
public void eat(){
System.out.println("兒子愛吃蔬菜");
}
//6.2添加子類重寫的方法
@Override
public void sleep(int n){
System.out.println("兒子要睡"+n+"個小時");
}
//7.3重寫父類的方法
public int play(){
//public long play(){//報錯:long與int沒有繼承關系
System.out.println("兒子在玩游戲");
return 999;
}
//8.3重寫父類中的方法
//寫法一:父子類的回傳值型別一致
// public Animal getPet(){
// Animal a = new Animal();
// return a;
// }
//寫法二:子類方法的回傳值型別是父類方法回傳值型別的子類
@Override
public Dog getPet(){
Dog d = new Dog();
return d;
}
}
//8.1準備兩個輔助測驗的類
class Animal{
String name = "啥動物都行";
}
class Dog extends Animal{
String name = "小狗";
}
4.靜態:
1.static可以修飾成員變數和方法
2.被static修飾的資源稱為靜態資源
3.靜態資源隨著類的加載而加載,最先加載,優先于物件進行加載
4.靜態資源可以通過類名直接呼叫,也被稱作類資源
5.靜態被全域所有物件共享,值只有一份
6.靜態資源只能呼叫靜態資源
7.靜態區域內不允許使用this與super關鍵字
5.靜態代碼塊static{}
- 格式:static{ }
- 位置:類里方法外
- 執行時機:隨著類的加載而加載,優先于物件進行加載【只加載一次】
- 作用:用于加載那些需要第一時間就加載,并且只加載一次的資源,常用來初始化
- 順序:靜態代碼塊 構造代碼塊 構造方法 普通方法【如果普通方法里有區域代碼塊,執行區域代碼塊】
TIPS: 如果有多個靜態資源,加載順序取決于先后位置
TIPS: 靜態不可以與this和super共用
6.final 關鍵字
- 修飾類:最終類,不可以被繼承
- 修飾方法:這個方法的最終實作,不可以被重寫
- 修飾常量:值不可以被更改,并且常量定義時必須賦值
注意:常量的定義需要使用全大寫,單詞之間使用下劃線分隔
7.重寫與多載的比較:
- 多載:在一個類中的現象:同一個類中,存在方法名相同,引數串列不同的方法
- 重寫:是指建立了繼承關系以后,子類對父類的方法不滿意,可以重寫,遵循兩同兩小一大原則
- 多載的意義:是為了外界呼叫方法時方便,不管傳入什么樣的引數,都可以匹配到對應的同名方法
- 重寫的意義:在不修改原始碼的情況下,進行功能的修改與拓展
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/316690.html
標籤:其他
