Java中的多態,抽象類,接口
多態
在運行期間,判斷所引用的對象的實際類型,根據實際情況調用特定的方法,即,同一個對象的多種狀態的行爲。
多態所需要滿足的條件
繼承
重寫
父類引用指向子類的對象(向上轉型)
⽰例:喜歡寵物的年輕婦⼥
public class Animal {
public String name;
public Animal(String name) {
this.name = name;
}
public void enjoy() {
System.out.println("我是動物的enjoy⽅方法");
}
}
class Dog extends Animal {
public String furColor;
public Dog(String name, String furColor) {
super(name);
this.furColor = furColor;
}
@Override
public void enjoy() {
System.out.println("旺旺...");
}
動態綁定(多態)
動態綁定是指在運⾏期間,判斷所引⽤對象的實際類型,根據其實際的類型調⽤相應的⽅法,多態即:⼀個對象的多
種狀態的⾏爲。
}
@Override
public String toString() {
return "我是⼀一隻狗," + this.name +"是我的名字,我的⽑毛⾊色是" +this.furColor;
}
}
class Cat extends Animal {
public String eyeColor;
public Cat(String name, String eyeColor) {
super(name);
this.eyeColor = eyeColor;
}
@Override
public void enjoy() {
System.out.println("喵喵...");
}
@Override
public String toString() {
return "我是⼀一隻貓," + this.name +"是我的名字,我眼睛的顏⾊色是" +this.eyeColor;
}
}
class Lady {
private String name;
private Animal pet;
public Lady(String name, Animal pet) {
this.name = name;
this.pet = pet;
}
public void enjoy() {
pet.enjoy();
}
}
@Test
public void test2(){
Dog d = new Dog("⾦毛", "⻩色");
Cat c = new Cat("咖菲貓", "咖啡⾊");
Lady mary = new Lady("Mary", d);
Lady lucy = new Lady("Lucy", c);
mary.enjoy();
lucy.enjoy();
}
抽象類
用關鍵字abstract修飾的類,就是抽象類,抽象類中必然有一個或者多個抽象方法,抽象方法不需要寫任何東西,即,public abstractvoid eat();
抽象類需要注意
子類繼承父類必然要重寫父類的抽象方法,
抽象類不能實例化
接口
接口是一種標準,用interface關鍵字定義的。接口是抽象類的特殊化。其實是抽象方法和靜態常量值的定義的集合。
示例:
packagetest11;
public interfaceVehicle {
voidstart(int speed);
voidstop(int speed);
}
抽象類與接口的區別
接口是抽象類的特殊版本,接口的方法必須都爲抽象,抽象類中有的方法可以不爲抽象方法。
實現抽象類裏的方法時,可以實現部分的方法,但是接口裏的方法必須都要實現
抽象類中可以有私有的成員變量和私有的方法
一個類只能繼承一個抽象類,Java只支持單繼承,但是一個類可以實現多接口
接口中的方法全部被修飾爲公共的抽象方法即,public abstract類型的