1. 程式人生 > 其它 >13. 類的繼承域的隱藏與方法的重寫

13. 類的繼承域的隱藏與方法的重寫

繼承格式

[類修飾符] class 子類名 [extends 父類名]

{

成員變數定義;

成員方法定義;

}

注:在java裡所有類都預設繼承Object這個類

public static void main(String[] args) {
// TODO Auto-generated method stub
Student a=new Student("張三",18);
a.show();
Undergraduate b=new Undergraduate("張三",18,"博士");
b.show();

}
}
class Student
{
String name;
int age;
public Student()//詳見下關於super的注意事項
{

}
public Student(String n,int a)
{
name=n;
age=a;
}
public void show()
{
System.out.println("學生姓名:"+name+" 年齡:"+age);
}
}
class Undergraduate extends Student//繼承方法Student
{
String degree;//新加入一個變數
public Undergraduate(String n,int a,String d)
{
name=n;
age=a;
degree=d;
}
public void show()//重寫show方法
{
System.out.print("學生姓名:"+name+" 年齡:"+age+" 學位:"+degree);
}
}

super關鍵字

this和super是Java語言中的兩個常用關鍵字。this常用來指代子類物件,super常用來指代父類物件。this和super與繼承有密切關係。

(1)在子類的所有構造方法中,必須首先呼叫一個父類的構造方法。

(2)如果子類自己沒有構造方法,則它將呼叫父類的無引數構造方法作為自己的構造方法;如果子類自己定義了構造方法,則在建立新物件時,它將先執行父類的無引數構造方法,然後再執行自己的構造方法。

(3)子類可在自己的構造方法中使用super(…) 來呼叫父類帶引數的構造方法。super(…)呼叫語句必須是子類構造方法中的第一個可執行語句。

class superclass
{
int x;
void getInfo( )
{
System.out.println("父類的域x的值為:"+x);
}
}
class subclass extends superclass
{
int x;
void getInfo()
{
x=20;
super.x=30;//利用super關鍵字給父類賦值
super.getInfo( );//利用super關鍵字呼叫父類方法
System.out.println("子類的域x的值為:"+x);
}
}
public class Test
{
public static void main(String args[ ])
{
subclass s=new subclass( );
s.getInfo( );
}
}

學習了super關鍵字可得此解法

public static void main(String[] args) {
// TODO Auto-generated method stub
Student s=new Student("張三",18);
s.show();

Undergraduate u=new Undergraduate("張三",18,"博士");
u.show();
}
}

class Student
{
String name;
int age;

public Student(String name,int age)
{
this.name=name;
this.age=age;
}

public void show()
{
System.out.println("學生姓名:"+name+" 年齡:"+age);
}
}

class Undergraduate extends Student
{
private String degree;

public Undergraduate(String name,int age,String degree)
{
super(name,age);//呼叫父類中的方法
this.degree=degree;
}

public void show()
{
System.out.print("學生姓名:"+name+" 年齡:"+age+" 學位:"+degree);
}
}