1. 程式人生 > 其它 >多型與抽象

多型與抽象

多型

方法多型

一個方法可以根據傳送物件的不同而採用多種不同的行為方式

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();

多型存在的條件

  1. 有繼承關係
  2. 子類重寫父類方法
  3. 父類的引用指向子類物件 Person person = new Student();
  4. 多型是方法的多型,屬性沒有多型

抽象類

  1. 抽象類用abstract修飾

  2. 抽象類不能被new,只能通過子類實現

  3. 抽象類中可以有抽象方法也可以有普通方法

  4. 抽象類的子類必須重寫抽象類的所有抽象方法

  5. 抽象方法只能在抽象類中

    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
		
	}
	
}