java中一个类的方法 为什么不通过创建对象也能调用另一个类的方法?

在Master类中没有创建Pet对象 为什么可以调用Pet对象中的eat方法?

第1个回答  2021-05-29
public void foo(Demo d) {
d.doSomething();
}

楼主想问的是为什么d没有创建新对象也可以调用doSomething()方法吧
Demo d = new Demo(<ARGS>);
因为这是在函数定义,而不是函数调用。
函数声明(declaration) - > 函数定义(definition) - > 函数调用(invoke, call)
函数声明和函数函数定义是不占用内存资源的。追问

我问的就是这个问题 但是呜呜我看不懂你的解释

追答

你好,我在。哪里不懂呢,我可以帮你。

追问

就是为什么能 调用没有创建对象里的 方法

追答

看我的例子,因为这里的d只是一个符号,是不分配内存的,不是真正的对象。您可以把类理解为一个模板,每次创建对象都要调用这个类。在我们定义的foo方法中,d不是真正的对象,只是一个符号,接下来在主函数中调用Demo d1 = new Demo(); Demo d2 = new Demo(); new关键字表示分配内存给这个对象,也就是分配了内存,d1.doSeomthing() 之所以能调用时因为 1. d1 是Demo 类的对象,2. Demo 类定义了doSomething() 方法。你始终记住,函数必须先声明后调用。在Java中,成员方法在对象上调用,所以d1.soSomething().

第2个回答  2021-11-05
* 问: 为什么没有创建对象也没有继承类,就直接调用另一个类中的方法???????
* 答: 函数声明(declaration) - > 函数定义(definition) - > 函数调用(invoke, call)
* 因为函数定义时,该变量是不分配内存的,不是真正的对象,当使用new关键字,分配内存给这个变量,该变量才成为了类的引用
* 也可跳过函数定义,直接在声明后调用,
* 格式: 类名.方法();
第3个回答  2021-05-29
你的feed不是有参数吗,传进去了啊,当然这里应该先判断是不是空

if(pet != null)
{
pet.edt();
}追问

想问一下 不是调用另一个类的东西都需要创建对象吗 不是应该在里面先有一句 Pet pet=new Pet()吗

追答

有对象就可以调用方法,并不表示这个对象必须在此时此刻创建,因为这个对象是从其他的地方已经创建。
比如你这个
public class Master{
public static void main(String[] args)
{
Pet pet=new Pet();//是在方法的外面创建了传进方法里面用的
feed(pet);
}
public void feed(Pet pet)
{
if(pet != null)
{
pet.edt();
}
}
}