多型與抽象
阿新 • • 發佈:2021-10-09
多型
方法多型
一個方法可以根據傳送物件的不同而採用多種不同的行為方式
class Person{ public void run(){ Sytsem.out.println("person"); } } class Student extends Person{ public void run(){ Sytsem.out.println("student"); } } class Teacher extends Person{ public void run(){ Sytsem.out.println("teacher"); } } public void Test{ public void main(String[] args){ Person p1 = new Person(); Person p2 = new Student(); Person p3 = new Teacher(); p1.run(); //輸出person p2.run(); //輸出student p3.run(); //輸出teacher } }
物件多型
一個物件的實際型別是確定的,但可以指向物件的引用的種類有很多
//new 一個物件的型別是確定的,但指向物件的引用可以很多
Student studnet = new Student();
Person person = new Studnet();
Object object = new Studnet();
多型存在的條件
- 有繼承關係
- 子類重寫父類方法
- 父類的引用指向子類物件 Person person = new Student();
- 多型是方法的多型,屬性沒有多型
抽象類
-
抽象類用abstract修飾
-
抽象類不能被new,只能通過子類實現
-
抽象類中可以有抽象方法也可以有普通方法
-
抽象類的子類必須重寫抽象類的所有抽象方法
-
抽象方法只能在抽象類中
public abstract class Action{ //抽象方法:稱為約束,用abstract修飾 public abstract void doSomething(); //普通方法 public void do(){ } }
介面
只有規範,自己無法寫方法~專業的約束,約束和實現分離
public interface UserService{ //介面中所有定義屬性預設都是靜態常量的public static final int AGE =20; //介面中所有定義方法預設都是抽象的public abstract void add(); void del(); void upt(); void sle(); } //介面必須得有實現類實現接口裡面的方法 //實現了介面的類必須重寫介面的方法 class UserServiceImpl implements UserService{ @Override public void add() { // TODO Auto-generated method stub } @Override public void del() { // TODO Auto-generated method stub } @Override public void upt() { // TODO Auto-generated method stub } @Override public void sle() { // TODO Auto-generated method stub } }