1.多型:在繼承/實現情況下的一種現象,表現為物件多型(兒子,學生),行為多型(跑的快慢)
方法編譯看左邊,執行看右邊
變數編譯看左邊,執行看左邊
package com.itheima.多型;
public class Test {
//物件多型,行為多型
public static void main(String[] args) {
//1.物件多型
People p1=new Teacher();
p1.run();//行為多型 識別技巧:編譯看左邊,執行看右邊
System.out.println(p1.name);
People p2=new Student();
p2.run();
System.out.println(p2.name);
}
}
class People{
public String name="父類People的名稱";
public void run(){
System.out.println("人可以跑");
}
}
class Student extends People{
public String name="子類Student的名稱";
@Override
public void run(){
System.out.println("跑的塊");
}
}
class Teacher extends People{
public String name="子類Teacher的名稱";
@Override
public void run(){
System.out.println("跑的氣喘吁吁");
}
}
2.多型的好處:
package com.itheima.多型; public class Test { //多型好處 public static void main(String[] args) { //好處1:實現解耦合,右邊物件可以隨時切換,後續業務隨即改變 People p1=new Teacher(); p1.run(); //好處2:可以使用父類型別的變數作為形參,可以接受一切子類物件 Student student=new Student(); Teacher teacher=new Teacher(); go(student); go(teacher); //p1.teach();//報錯,因為編譯看左邊,父類沒有所以報錯了 } //好處2:可以使用父類型別的變數作為形參,可以接受一切子類物件 public static void go(People p){ } } class People{ public String name="父類People的名稱"; public void run(){ System.out.println("人可以跑"); } } class Student extends People{ public String name="子類Student的名稱"; public void test(){ System.out.println("考試"); } @Override public void run(){ System.out.println("跑的塊"); } } class Teacher extends People{ public String name="子類Teacher的名稱"; public void teach(){ System.out.println("教書"); } @Override public void run(){ System.out.println("跑的氣喘吁吁"); } }