java 抽象类、接口通过内部类作为方法的参数

参考文档:https://www.cnblogs.com/java-demo/articles/9142993.html

public class Fun {
    public static void main(String[] args) {
        // Person p = new Person(); operatePerson(p); 这样也可以
        operatePerson(new Person());
        // Animal a = new Cat(); operateAnimal(a); 这样也可以
        operateAnimal(new Cat());
        // 扩展: 还可以通过内部类一次传入
        operateAnimal(new Animal() {
            @Override
            public void run() {
                System.out.println("get from inner class----cat");// 这个逗号别忘了加
            }
        });
        // 要求传入父类对象, 但可以传入任意的子类对象,这样就使得扩展性得到了提高
        // 如: operateAnimal(new Cat()); operateAnimal(new Dog());
        // operateAnimal(new Bird());
        // Smoking s = new Student(); operateSmoking(s); 这样也可以
        operateSmoking(new Student());
        // 扩展: 接口也可以同内部类传入
        operateSmoking(new Smoking() {
            @Override
            public void smoking() {
                System.out.println("get from inner class----smoking");
            }
        });
    }

    public static void operatePerson(Person p) {
        p.eat();
        System.out.println("operatePerson eat");
    }

    public static void operateAnimal(Animal a) {
        a.run();
    }

    public static void operateSmoking(Smoking s) {
        s.smoking();
    }
}

// 1. 普通类当作方法参数传入
class Person {
    public void eat() {
        System.out.println("Person eat");
    }
}

// 2. 抽象类作为方法参数传入
abstract class Animal {
    abstract void run();
}

class Cat extends Animal {
    @Override
    void run() {
        System.out.println("I am cat");
    }
}

// 3. 接口实现类的对象作为方法参数传入
interface Smoking {
    public abstract void smoking();
}

class Student implements Smoking {
    public void smoking() { // 实现接口的方法的修饰符范围可以比接口的范围大
        System.out.println("in smoking");
    }
}

输出:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值