1.用super操作被子類隱藏的成員變量和方法
當我們在子類中隱藏了父類的成員變量和方法後,還想操作被隱藏掉的父類的成員變量和方法時:就用到了super關鍵字
子類一旦隱藏了繼承的成員變量,那麼子類創建的對象就不再擁有該變量,該變量歸關鍵字super所擁有
class A{
int n;
public int getSum() {
int sum=0;
for(int i=1;i<=n;i++) {
sum+=i;
}
return sum;
}
}
class B extends A{
int n;
public int getSum() {
super.n=n;//操作A類中的n,把B類中的100賦值給A類中的n
return super.getSum();//操作A類中的方法,計算從1加到100
}
}
public class Array{
public static void main(String[] args) {
B test1=new B();
test1.n=100;
int ans=test1.getSum();
System.out.println(ans);
}
}
2.用super調用父類的構造方法
要知道:子類並不會繼承父類的構造方法
1.如果子類的構造方法沒有明顯地指明使用父類的哪一個構造方法,子類就調用父類的不帶參數的構造方法
2.子類在其構造方法中需要使用super關鍵字來調用父類的構造方法,而且super必須是子類構造方法的頭一條語句
class Student{
int age;
String name;
Student(){
}
Student(int age,String name){
this.age=age;
this.name=name;
System.out.println("姓名和年齡爲:"+name+" "+age);
}
}
class UniversityStudent extends Student{
boolean marrage;
UniversityStudent(int age,String name,boolean marrage){
super(age,name);//調用父類的構造方法
this.marrage=marrage;
System.out.println("婚姻狀況:"+marrage);
}
}
public class Array{
public static void main(String[] args) {
UniversityStudent stu=new UniversityStudent(20,"孫澤坤",false);
}
}
這個例子中,super調用的時父類的構造方法Student(int age,String name)
下面我們對這個程序做一點小小的改進
class Student{
int age;
String name;
}
class UniversityStudent extends Student{
boolean marrage;
UniversityStudent(int age,String name,boolean marrage){
//不寫,等同於寫了super();因爲父類沒有構造方法,也算有了一個默認的空構造方法
this.marrage=marrage;
System.out.println("婚姻狀況:"+marrage);
}
}
public class Array{
public static void main(String[] args) {
UniversityStudent stu=new UniversityStudent(20,"孫澤坤",false);
}
}
這樣仍然可以編譯運行,這就印證了“如果子類的構造方法沒有明顯地指明使用父類的哪一個構造方法,子類就調用父類的不帶參數的構造方法”
當需要在父類中定義多個構造方法時,應當包含一個不包含參數的構造方法,以防子類省略super時出錯。就像第一個代碼一樣,包含一個不包含參數的的構造方法Student(){}。
3.final關鍵字
final關鍵字可以修飾類、成員變量、和方法中的局部變量。
(1).final關鍵字修飾類:
被final類修飾的類不能有子類,例如Java在java.lang包中提供的String類對於編譯器和解釋器的運行有着重要的作用,Java不允許用戶擴展String類,因此String類被Java修飾爲final類
(2).final修飾方法:
被final修飾的父類中的方法不允許子類重寫,子類只能老老實實繼承父類被final修飾的方法
(3).final修飾變量:
被final修飾的變量(成員變量或者局部變量)稱爲常量,常量在運行期間不允許發生變化,所以聲明常量時,他不會具有默認值0或者是null,所以在聲明常量時必須指定該常量的值。