在AnimalTest这个类中的func方法形参为什么可以放其它类并且没有实例化也可以调用Animal类中的eat,shout方法,


public class AnimalTest {
    public void func(Animal animal) {
        animal.eat();
        animal.shout();
    }

}
class Animal{
    public void eat() {
        System.out.println("进食");
    }
    public void shout() {
        System.out.println("叫");
    }

}
class Dog extends Animal{
    public void eat() {
        System.out.println("狗粮");
    }
    public void shout() {
        System.out.println("汪汪");
    }

}
class Cat extends Animal{
    public void eat() {
        System.out.println("鱼");
    }
    public void shout() {
        System.out.println("喵~");
    }

因为你传入的参数Animal animal是一个实例,所以可以调用

  1. 类本身是引用数据类型,与基本数据类型(如int)相同,可以用来声明变量。只不过声明的变量是用来保存对象的实际地址的。
  2. 有了上面的前提,那么讲讲形参,形参就是声明好变量,用来承接实参传输过来的数据,且引用变量之间是地址传递,即是将实参所指向的对象的地址,赋给了形参,之后形参指向实参同一个对象实例。
  3. 上面两点就可以说明为什么可以放其他类
  4. 为什么没有实例化就可以调用类中的方法。先想想调用AnimalTest的func方法时,要传进一个实参!!,在结合上面第二点,那么在func中调用形参的对象内的方法,肯定是允许的。

为啥与你的代码这么相似

1、“方法形参为什么可以放其它类”。Java也没有规定不能放吧
2、“没有实例化也可以调用”。它这里只是声明了 它需要传入的是Animal类型的对象,至于传入的到底是不是Animal、有没有实例化,要到调用的时候才知道。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632