多態的實現方式有哪些?php
第一種實現方式:基於繼承實現的多態java
基於繼承的實現機制主要表如今父類和繼承該父類的一個或多個子類對某些方法的重寫,多個子類對同一方法的重寫能夠表現出不一樣的行爲。多態的表現就是不一樣的對象能夠執行相同的行爲,可是他們都須要經過本身的實現方式來執行,這就要得益於向上轉型了。git
public class MainJava { public static void main(String[] args) { //定義父類數組 Wine[] wines = new Wine[2]; //定義兩個子類 Test1 test1 = new Test1(); Test2 test2 = new Test2(); Wine win e = new Wine(); //父類引用子類對象 wines[0] = test1; wines[1] = test2; for(int i = 0 ; i < 2 ; i++){ System.out.println(wines[i].toString() + "--" + wines[i].drink()); } System.out.println("-------------------------------"); System.out.println(test1.toString() + "--" + test1.drink()); System.out.println(test2.toString() + "--" + test2.drink()); } public static class Wine { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public String drink(){ return "喝的是 " + getName(); } public String toString(){ return null; } } public static class Test1 extends Wine{ public Test1(){ setName("Test1"); } public String drink(){ return "喝的是 " + getName(); } public String toString(){ return "Wine : " + getName(); } } public static class Test2 extends Wine{ public Test2(){ setName("Test2"); } public String drink(){ return "喝的是 " + getName(); } public String toString(){ return "Wine : " + getName(); } } }
抽象類和普通類有何區別程序員
抽象類和普通類最大的區別是,抽象類不能被實例化,須要繼承抽象類才能實例化其子類。github
public abstract class AbstractClassExample { protected int x; private int y; public abstract void func1(); public void func2() { System.out.println("func2"); } }
public class AbstractExtendClassExample extends AbstractClassExample {br/>@Override
public void func1() {
System.out.println("func1");
}
}面試