繼承
1 繼承
class [ClassName] extends [SuperClass]
public class Animal {
....
}
class Dog extends Animal{
....
}
以實際狀況來舉例,如果我們已經有了一個名為Animal的class
public class Animal {
private String name;
private String age;
private String color;
public void changeName(String NewName){
name=NewName;
}
public void showInfo(){
System.out.println("name="+name);
System.out.println("age="+age);
System.out.println("color="+color);
}
public void bark(){
System.out.println("bark");
}
}
我們還要從animal這個類別中,細分出一個名為dog的類別及一個名為cat的類別
dog和cat除了有本來animal就會做的bark動作及特徵外,也會新增他們專屬的特徵跟動作
class Dog extends Animal{
public void GetNewsPaper(){
...
}
public void CatchFrisbee(){
...
}
}
class Cat extends Animal{
public void LickingFur(){
...
}
}
class Dog不光只有GetNewsPaper( )和CatchFrisbee( )兩個function,它還可以使用父類別繼承下來的public及protected function(***為何沒有private請參照修飾字單元),請看下方例子
繼承會將父類別除了private外的所有function和variavble都繼承下來!!!
public class MainClass {
public static void main(String[] args) {
Dog myDog=new Dog();
myDog.GetNewsPaper(); //使用自己的function
myDog.bark(); //使用父類別Animal的function
}
}
------------------------
bark
可以將public function改成private,或將private variable改成protected或public,來試試看子類別能不能存取到
建構子繼承
public class Animal {
private String name;
private String age;
private String color;
public Animal(){}
public Animal(String n,String a,String c){
name=n;
age=a;
color=c;
}
....//以下省略程式碼
}
即使我們只要用Animal(String n,String a,String c)的建構子,建議還是要將Animal()預設建構子寫出來,子類別才不會被強制要求須使用建構子
class Dog extends Animal{
Dog(String n,String a,String c){
super(n,a,c);
}
....
}
或許有人會疑惑,為什麼此處建構子我們沒加public,但是animal的建構子我們卻寫了
這是因為,Animal這個class本身就是public,如果所有人都可以存取這個class,卻不是所有人都可以使用它的建構子,這不是很怪嗎? 所以我們也將Animal的建構子設成public
而Dog本身是沒有設定的,按照modifier的教學內容,沒有設定的話只有跟他同個package的才可以存取它,所以它的建構子權限我也將它設成沒有設定的預設狀態。
public class MainClass {
public static void main(String[] args) {
Dog myDog=new Dog("Happy","13","yellow");
System.out.println("");
myDog.showInfo();
}
}
---------------------------------
Animal constructor is called
Dog constructor is called
name=Happy
age=13
color=yellow
我在Animal跟Dog的建構子都各加上一行print,由此可以看出他們執行的順序
注意!!! 父類別的建構子完成之後,才會完成子類別的建構子。
單一繼承
在java裡面只允許單一繼承
例如研究生只能繼承自學生,但學生這個類別也已經繼承自人類,所以研究生同時是人類及學生的一種,但在java中你不能一次讓研究生繼承兩個類別,只能這樣間接繼承人類的屬性。