天天看點

Java中的多态,抽象類,接口

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