java extends关键字是一个引用变量吗?
我知道extends关键字在java中的作用,但我想了解java编译器在看到extends关键字时的作用java extends关键字是一个引用变量吗?,java,keyword,Java,Keyword,我知道extends关键字在java中的作用,但我想了解java编译器在看到extends关键字时的作用 class A{ //some state //some behavior } class B extends A{ } 在我看来,当编译器看到extends关键字时,它会创建超类对象以在子类中使用。我知道我们可以在子类构造函数中使用超级引用关键字来引用超级类构造函数 否,没有对超类对象的引用。当您执行new B()时,以您的示例为例,创建了一个对象,该对象具有a和B功能的组合,而
class A{
//some state
//some behavior
}
class B extends A{
}
在我看来,当编译器看到extends关键字时,它会创建超类对象以在子类中使用。我知道我们可以在子类构造函数中使用超级引用关键字来引用超级类构造函数 否,没有对超类对象的引用。当您执行
new B()
时,以您的示例为例,创建了一个对象,该对象具有a
和B
功能的组合,而不是将B
和a
对象与它们之间的关系分开。(这将是原型继承,在几种语言中使用,但在Java中不使用。)
super
不是对单独对象的引用。发件人:
表单super
.Identifier是指当前对象的名为Identifier的字段,但当前对象被视为当前类的超类的实例
有时,似乎必须有两个独立的对象,例如当您对实例字段进行阴影处理时:
class A {
private int field;
A(int value) {
this.field = value;
}
public void sayField() {
System.out.println("(A) field == " + this.field);
}
}
class B extends A {
private int field;
B(int aValue, int bValue) {
super(aValue);
this.field = bValue;
}
@Override
public void sayField() {
super.sayField();
System.out.println("(B) field == " + this.field);
}
}
如果您这样做:
B b = new B(1, 2);
b.sayField();
…你得到()
(A) 字段==1
(B) 字段==2
如果只有一个对象,它怎么可能是
A#sayField
中的this.field
使用与B#sayField
中的字段不同的field
?答案是:在一个对象中有两个字段
字段。编译器告诉A#sayField
中的代码使用第一个,告诉B#sayField
中的代码使用第二个。是extends关键字A reference varaible吗?我的主要目的是extends关键字。它是如何工作的?@RidaBatool:不,同样,没有单独的对象可供参考。我把答案扩大了一点,想让它更清楚。谢谢你的解释。。好的,我得到了你说只创建了一个对象的部分。。但我想再次了解extends关键字,编译器在看到extends时会做什么keyword@RidaBatool当前位置我不明白你在问什么。当它在类定义上看到extends
时,编译器将查找列出的类,并使新类成为它的子类。
(A) field == 1
(B) field == 2