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類型的