?? 理解繼承是理解面向?qū)ο蟪绦蛟O(shè)計的關(guān)鍵.在Java中,通過關(guān)鍵字extends繼承一個已有的類,被繼承的類稱為父類(超類,基類),新的類稱為子類(派生類).在Java中不允許多繼承.code:
class Animal
{
?int height,weight;
?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
{
?
}
class DoMain
{
?public static void main(String[] args)
?{
??Animal an=new Animal();
??Fish fn=new Fish();
??
??an.breathe();
??fn.breathe();
??fn.height=30;
??fn.weight=20;
?}
}
Result:
F:\Java Develop>javac Animal.java
F:\Java Develop>java DoMain
Animal breathe!
Animal breathe!
(這說明派生類繼承了父類的所有方法和成員變量.)
方法的覆蓋(override)
在子類中定義一個與父類同名,返回類型,參數(shù)類型均相同的一個方法,稱為方法的覆蓋,方法的覆蓋發(fā)生在子類與父類之間.
code:
class Animal
{
?int height,weight;
?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
{
?int weight,height;?? //隱藏了父類的weight,height;
?void breathe()? //override method breathe()
?{
??super.breathe();? //用super調(diào)用父類的構(gòu)造方法
??System.out.println("Fish bubble");
?}
}
class DoMain
{
?public static void main(String[] args)
?{
?//?Animal an=new Animal();
??Fish fn=new Fish();
??
??an.breathe();
??fn.breathe();
??fn.height=30;
??fn.weight=20;
?}
}
輸出結(jié)果:
F:\Java Develop>javac Animal.java
F:\Java Develop>java DoMain
Animal breathe!
Fish bubble
特殊變量super
* 使用特殊變量super提供對父類的訪問
* 可以使用super訪問父類被子類隱藏的變量或覆蓋的方法
* 每個子類構(gòu)造方法的第一條語句都是隱含的調(diào)用super,如果父類沒有這種形式的構(gòu)造函數(shù)就會報錯.
code:
class Animal
{
?int height,weight;
?Animal()
?{
??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
{
?Fish()
?{
??System.out.println("Fish construct");
?}
?void breathe()? //override method breathe()
?{
??System.out.println("Fish bubble");
?}
}
class DoMain
{
?public static void main(String[] args)
?{
??//Animal an=new Animal();
??Fish fn=new Fish();
??
??//an.breathe();
??//fn.breathe();
??//fn.height=30;
??//fn.weight=20;
?}
}
輸出結(jié)果:
F:\Java Develop>javac Animal.java
F:\Java Develop>java DoMain
Animal construct
Fish construct