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("不准吸煙");

    }

  }

);

總結:類當成方法參數傳入,其實就是傳對象。抽象類和接口其實就是傳其子類或實現類的對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM