1. 程式人生 > 其它 >JAVA:將類、抽象類、介面當成方法的引數傳入

JAVA:將類、抽象類、介面當成方法的引數傳入

將類當成引數傳入方法,其實就是將類的物件傳入方法,如果是抽象類,其實就是將抽象類的子類的物件傳入方法,如果是介面,其實就是將介面實現類的物件傳入方法。

因為抽象類和介面是不能例項化成物件的,所以必須找它們的子類或實現類

1. 普通類物件當成方法引數傳入

public class Person{

  public void eat(){

    System.out.println("吃飯");

  }

}

//方法

public static void operatePerson(Person p){ 

  p.eat();

}

//main呼叫方法,將person物件傳入方法中

operatePerson(
new person());

2. 抽象類作為方法引數傳入

//抽象類

public abstract class Animal{

  public abstratc void eat();

}

//Animal的子類

public class Cat extends Animal{

  //重寫方法

  public void eat(){

    System.out.println("貓吃魚");

  }

}

//main中的方法,這裡要求傳入Animal類,但Animal的類是一個抽象類,不能例項物件,所以只能傳其子類。

function static void operateAnimal(Animal a){

  a.eat();

}

//方法的呼叫 Animal a = new Cat(); operateAnimal(new cat());或operateAnimal(a); 當然,還要以通過內部類一次性傳參 operateAnimal(   new Animal(){     //重寫animal抽象方法     public void eat(){System.out.println("貓還吃飯");}   } );

要求傳入父類物件,但可以傳入任意子類物件,這樣就使得擴充套件性得到提高

operateAnimal(new Cat());

operateAnimal(new Dog());

operateAnimal(new Bird());

......

傳入什麼類,就呼叫什麼類的功能,這就是多型的實現。

3. 介面實現類的物件當成方法引數傳入

public interface Smoking{

  public abstract void smoking();

}

//實現類

public class Student implements Smoking{

  //實現介面方法

  public void smoking(){

    System.out.println("抽菸中....");

  }

}

//main中定義方法,將介面實現類當方法引數傳入

public static void operateSmoking(Smoking s){

  s.smoking();

}

//方法的呼叫

Smoking s = new Student();

operateSmoking(s);或operateSmoking(new Student());

或用內部類傳入

operateSmoking(

  new Smoking(){

    //重寫介面方法

    public void smoking(){

      System.out.println("不準吸菸");

    }

  }

);

總結:類當成方法引數傳入,其實就是傳物件。抽象類和介面其實就是傳其子類或實現類的物件。

來源 :https://www.cnblogs.com/java-demo/articles/9142993.html