Java麵向對象高級--繼承的進一步研究
1、子類對象的實例化過程

class Person{ // 定義Person類
private String name ; // 定義name屬性
private int age ; // 定義age屬性
public Person(){
System.out.println("父類Person中的構造。") ;
}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age ;
}
public String getName(){
return this.name ;
}
public int getAge(){
return this.age ;
}
};
class Student extends Person{ // 定義Student類
private String school ; // 定義school屬性
public Student(){
super() ; // 默認隱藏
System.out.println("子類Student中的構造。") ;
}
public void setSchool(String school){
this.school = school ;
}
public String getSchool(){
return this.school ;
}
};
public class InstanceDemo{
public static void main(String arsg[]){
Student stu = new Student() ;// 實例化子類對象
stu.setName("張三") ; // 此方法在Student類中沒有明確定義
stu.setAge(30) ;
stu.setSchool("清華大學") ;
System.out.println("姓名:" + stu.getName() + ",年齡:" + stu.getAge() + ",學校:" + stu.getSchool() ) ;
}
};
對於子類的構造方法中,隱藏了super的語句,有時也將父類稱為超類。
2、方法的覆寫


class Person{ // 定義父類
private void print(){ // 默認的訪問權限
System.out.println("Person --> void print()。") ;
}
public void fun(){ // 定義一個fun方法
this.print() ; // 調用print()方法
}
};
class Student extends Person{ // 定義繼承關係
void print(){ // 覆寫父類中的方法
// super.print() ; // 訪問父類中被子類覆寫過的方法
System.out.println("Student --> void print()。") ;
}
};
public class OverrideDemo04{
public static void main(String args[]){
Student s = new Student() ;
s.fun() ;
}
};
此時,方法並沒有被覆寫,而是相當於在子類中又重新定義了一個新的方法。
3、屬性的覆蓋
class Person{ // 定義父類
public String info = "MLDN" ; // 定義一個公共屬性
};
class Student extends Person{ // 定義繼承關係
public String info = "LXH" ; // 定義了一個與父類中屬性名稱一致的屬性
void print(){ // 覆寫父類中的方法
System.out.println("父類中的屬性:" + super.info) ;
System.out.println("子類中的屬性:" + this.info) ;
}
};
public class OverrideDemo05{
public static void main(String args[]){
Student s = new Student() ;
s.print() ;
}
};
4、方法的覆寫與重載的區別

5、super關鍵字
super表示從子類中調用父類中的操作:如,調用屬性,方法,構造等等。
子類在實例化的時候,默認會調用父類中的無參構造,如果希望調用有參構造,則必須在子類中明確的聲明。
class Person{ // 定義Person類
private String name ; // 定義name屬性
private int age ; // 定義age屬性
public Person(String name,int age){
this.setName(name) ;
this.setAge(age) ;
}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age ;
}
public String getName(){
return this.name ;
}
public int getAge(){
return this.age ;
}
public String getInfo(){
return "姓名:" + this.getName() + ";年齡:" + this.getAge() ;
}
};
class Student extends Person{ // 定義Student類
private String school ; // 定義school屬性
public Student(String name,int age,String school){
super(name,age) ; // 明確調用父類中有兩個參數的構造
this.school = school ;
}
public void setSchool(String school){
this.school = school ;
}
public String getSchool(){
return this.school ;
}
public String getInfo(){
return super.getInfo() + ";學校:" + this.getSchool() ;
}
};
public class SuperDemo01{
public static void main(String arsg[]){
Student stu = new Student("張三",30,"清華大學") ;// 實例化子類對象
System.out.println(stu.getInfo()) ;
}
};

最後更新:2017-04-03 15:21:51