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