JAVA:將類、抽象類、介面當成方法的引數傳入
阿新 • • 發佈:2022-05-06
將類當成引數傳入方法,其實就是將類的物件傳入方法,如果是抽象類,其實就是將抽象類的子類的物件傳入方法,如果是介面,其實就是將介面實現類的物件傳入方法。
因為抽象類和介面是不能例項化成物件的,所以必須找它們的子類或實現類
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