1. 程式人生 > >Java——super和final關鍵字

Java——super和final關鍵字

一、方法覆寫關鍵字——super

1 、super用於方法 《1》用於構造方法(重要)——super(引數列表) 當子類呼叫父類無參構造方法時,super()可寫可不寫;表示呼叫父類無參構造。 當子類呼叫父類有參構造方法時,super(引數列表)必須要寫,要告訴編譯器當前呼叫的是那個有參構造。

注意: a. 子類構造方法中呼叫父類構造必須是第一行 b.this與super不能同時呼叫

《2》用於普通方法 用法:super.方法名(引數) 用於在子類中明確呼叫父類中被覆寫的方法

2 、super用於屬性(瞭解) 用法:super.屬性名 表示呼叫父類中被覆寫的屬性,許可權不是private 在這裡插入圖片描述

二、final修飾類(String類和8大基本資料型別的包裝類,Integer)

當一個類被final修飾,表示該類不可以擁有子類(不允許有繼承); 一旦一個類被final修飾,該類的所有方法都會預設加上final(成員變數不會加final)

《1》 final修飾方法 當一個方法被final修飾,明確表示該方法不允許被覆寫 當一個方法被private修飾後,相當於加了一個final關鍵字

《2》 final修飾屬性——常量

1.final修飾普通資料型別的成員變數(最主要的用途) 被final修飾的成員變數: ①必須在宣告時初始化,並且初始化後值無法被修改; ②也可在構造塊或構造方法中初始化

** 注意區分** public final int a=10;(棧中) public static int b=20;(全域性資料區,共享)

final 變數——是常量,每個物件都有自己的final變數,在每個物件產生時初始化;

static final——全域性變數,所有物件共享,在類載入時初始化,效率較高,通過類名呼叫

全域性變數命名規範: 多個單詞全大寫,單詞之間用_分隔 初始化全域性變數方法:在靜態程式碼塊中初始化

2、final修飾引用資料型別的變數(值不能改變)

eg:class person{ } public static void main(){ final person p=new person();//表示p指向的地址不可變,但類person的屬性值等可變 }

3、final修飾的引用變數,資料型別也不可變 在這裡插入圖片描述

解析:出錯的是——語句1,3,4 語句1——b1,b2都為int型,b3為byte可能丟失資料——錯誤 語句2——b1為int型,b4為byte切不可變,故不能提升為int,錯誤 語句3——同上