} 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)。多態性 } }