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

 

posted @ 2022-05-06 14:46  程序员小明1024  阅读(461)  评论(0编辑  收藏  举报