大家好,我有与此相关的问题' Java中的关键字。 (1) 让我们说计算机从机器扩展而来,我们有当前的代码:
public class Machine {
private String name = "Machine";
public void test()
{
System.out.println(this.name);
}
public void test2()
{
System.out.println(this);
}
}
public class Computer extends Machine {
public void test()
{
System.out.println(this);
}
}
public class main {
public static void main(String[] args) {
Machine c = new Computer();
c.test();
c.test2();
}
}
其印刷品:
Computer@1db9742
Computer@1db9742
这意味着'这个'在计算机中指的是计算机,这是我理解但是这个'这个'在机器中也指计算机,这是我无法理解的。
这是怎么发生的,为什么.. ???
(2)
那么如果Machine m = new Computer()
这是真的吗?
所以那些回答我的人,我可以理解这与new
或我们所说的类型指向的内容有关......?
答案 0 :(得分:0)
this
是指向当前对象的指针,对象知道它们是什么类型。
答案 1 :(得分:0)
关键字this
是指当前的对象,它是类的实例,而不是类本身。您创建了一个对象(new Computer()
),它是Computer
的一个实例。由于Computer
是Machine
的子类,因此它也是Machine
的实例,但默认的toString()
方法将返回包含最精确类型的字符串,在本例中Computer
。
答案 2 :(得分:0)
你不能从类中访问私有变量,你必须创建getter方法或将变量设为public,而且在System.out.println()中调用toString()方法,如果未定义,则打印类似的东西你有结果(对象的类型和内存中的位置)。
只需在Machine类中创建方法:
public String getName() {
return name;
}
在main方法中添加以下内容:
System.out.println(c.getName());
答案 3 :(得分:0)
Computer @ 1db9742只是您对象的名称。即使每个方法都在不同的类中定义,它也是同一个对象。
"这"指的是对象,而不是类。
答案 4 :(得分:0)
Computer
扩展了Machine
,因此Computer
继承了Machine
的所有方法,使其成为自己的方法。
当您实例化Computer
时,您正在运行所有方法。
答案 5 :(得分:0)
this
引用您所处的上下文。在您的情况下,您在Machine
和Computer
类上使用它。
要理解这一点,您首先需要了解变量Machine m
,它不是对象本身,但它确实引用了内存中的对象。
然后,您要从同一个对象,两个不同的方法调用,一个在对象类(Computer
)上实现,另一个在其超类(Machine
)上实现。
调用indifferently witch方法,你进行方法调用的对象是相同的,this
关键字将引用同一个对象,然后,你的测试结果将是完全相同的对象:
Computer@1db9742
Computer@1db9742
答案 6 :(得分:0)
这是真实的类型。不是参考。 举个例子:
class Animal{
void makeSound(){
System.out.println("wut ? Don't know what to do :(");
}
}
class Cat extends Animal{
void makeSound(){
System.out.println("Miaw !");
}
}
例如,创建时:
Animal a = new Cat();
你实际上是在创造一只猫。而猫,猫总是动物吗? (我是对的吗?:D)
a.makeSound()
会导致打印Miaw !
。但是!
Animal a= new Animal();
a.makeSound();
将导致打印:wut ? Don't know what to do :(
。毕竟动物的声音是什么?你明白了吗?
如果有人要求你带动物,你可以随身携带一只猫。对 ? 嗯,这是请求Animal参数的方法的情况: 采取这个功能:
void doSomething(Animal param){
// some code
}
您可以使用Cat对象作为参数调用它:
//...
doSomething(new Cat());
//...
等...(你可以推断类比......更广泛的水平)
Java VM负责在运行时进行类型解析以决定调用哪种方法。这就是OOP的一些甜头。