参考文档: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");
}
}
输出: