/*
* Created on 2004-8-31
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/**
* @author diyer6
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/*
類的繼承
1、在java中通過關鍵字 extends 繼承一個已有的類,被繼承的類成爲父類(基類),新的類
稱爲 子類(派生類)。
2、在java中,不允許多繼承。
3、在子類中定義一個與父類同名、返回類型、參數類型均相同的一個方法,稱爲方法的 覆蓋。
4、覆蓋 發生在子類與父類之間。
5、特殊變量super 提供了對父類的訪問。
6、可以使用super 訪問父類被子類隱藏的變量和覆蓋的方法。
7、每個子類構造方法的第一條語句,都是隱含的調用super(),如果父類沒有構造方法,
那麼在編譯的時候就會報錯。
多態性
1、通過覆蓋父類的方法來實現,在運行時根據傳遞的對象引用,來調用相應的方法。
2、簡單概括多態性:當我們將子類對象的引用傳給聲明爲父類的一個對象變量,如果子類有
這個方法就調用子類的方法,如果子類沒有這個方法就調用父類的這個方法。
3、多態性的好處:它可以根據在運行的時候,根據我們傳遞不同對象的引用,
來調用不同對象的方法。
*/
public class Animal { //父類
int height,weight; // 變量(數據)
Animal(int height, int weight)//父類的構造方法 (帶參數的父類構造方法)
{
System.out.println("animal construct");
}
void eat() //父類的方法
{
System.out.println("animal eat");
}
void sleep()//父類的方法
{
System.out.println("animal sleep");
}
void breathe()//父類的方法
{
System.out.println("animal breathe");
}
}
class Fish extends Animal { //子類 關鍵字 extends 使 Fish 繼承了 Animal 的 變量和方法
int height;//子類的變量 ,在調用時會隱藏父類的變量。
Fish()//子類的構造方法
{
super(30,40);//利用 super 調用帶參數的父類構造方法。
//不能Animal(30,40)這樣直接調用父類構造方法。只能用super()調用。
//父類的構造方法不能被子類繼承。
//super();//在調用子類構造方法的時候,隱含的調用了 super() 變量,
//也就是先調用父類的構造方法(不帶參數)在調用子類的構造方法。如果父類沒有構造方法,編譯器就會報錯。
System.out.println("fish construct");
}
void breathe()//子類的方法
{
super.breathe();//通過 super 特殊變量 可以調用被子類覆蓋的父類方法。
super.height=40;//通過 super 特殊變量 可以調用被子類隱藏的父類變量。
System.out.println("fish bubble");
}
}
class Integration {
static void fn(Animal an)
{
an.breathe();
}
public static void main(String[] args){
Animal an = new Animal(); //實例化Animal類的對象,an是對象的reference(引用)
Fish fh = new Fish();//實例化Fish類的對象,fh是對象的reference(引用)
an.breathe();//an 調用Animal類的void breathe()方法。
fh.height=30;//fh給Animal類的變量int height 賦值.繼承父類的成員變量.
fh.breathe();//fh調用它自己的方法,假如它自己沒有這個方法但父類(Animal)中有這個方法,它就會調用父類中的這個方法。
//反之(如果有),它就會調用它自己的方法,這就是方法的覆蓋。
//多態性
Animal an;//將an聲明爲Animal的對象變量。
Fish fh2 = new Fish();
fh2.eat();
an=fh;
an=fh2;//因爲子類沒有eat()這個方法,所以這調用的是父類的eat()方法。
Integration.fn(an);//直接用類名調用靜態方法(static)。多態性
}
}