• 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

  • 相关阅读:
    Android 学习笔记之WebService实现远程调用+内部原理分析...
    Android学习笔记之Json的使用....
    Android学习笔记之DocumentBuilder的使用....
    Android学习笔记之ExecutorService线程池的应用....
    Android学习笔记之SoftReference软引用...
    windows系统获取进程的pid号并终止
    Linux系统的时间比北京时间慢12个小时的处理方案(将EDT时区改为CST)
    将java的jar包作为windows的服务来启动
    linux初始化shell脚本
    linux中网络部分的总结
  • 原文地址:https://www.cnblogs.com/konglxblog/p/16228694.html
Copyright © 2020-2023  润新知