多態從實現的角度分爲:靜態多態和動態多態
靜態多態也叫做編譯時多態
動態多態也叫做運行時多態
1.靜態的多態:
函數重載是靜態的多態的一種實現形式:
舉例說明:
class MethodOverloading {
viod receive(int i) {
System.out.println("Received one int data");
System.out.println("i="+i);
}
viod receive(float f) {
System.out.println("Received one float data");
System.out.println("f="+f);
}
viod receive(String s) {
System.out.println("Received a String");
System.out.println("s="+s);
}
}
<pre>
方法重載是在編譯時就已經確定的,所以屬於靜態多態
2.動態的多態:
子類覆蓋父類的方法,將子類的實例傳與父類的引用調用的是子類的方法;實現接口的實例傳與接口的引用調用的實現類的方法。
舉例說明
例一:
public class A{
public void fun1(){
System.out.println("I'm A");
}
}
public class B extends A{
public void fun1(){
System.out.println("I'm A");
}
}
public Test{
public static void main(String[]args){
A a1 = new A();
A a2 = new B();
a1.fun1();
a2.fun1()
}
}
輸出:I'm A
I'm B
例二:
public interface A{
public void fun1(){}
}
public class B implements A{
public void fun1(){
System.out.println("I'm B");
}
}
public class B implements A{
public void fun1(){
System.out.println("I'm C");
}
}
public Test{
public static void main(String[]args){
A a1 = new B();
A a2 = new C();
a1.fun1();
a2.fun1()
}
}
輸出:I'm B
I'm C