java实例变量可以被覆盖吗_Java继承覆盖实例变量

参见英文答案 > Java Inheritance – instance variables overriding                                    3个

我正在学习java.我对遗产有疑问.当子类扩展父类时,父类有一个方法引用父类中声明的实例变量.但是,子类dint会覆盖此方法,并声明了与父类同名的实例变量.在这种情况下,将引用来自child的实例变量或将引用parent.以下是代码段

class parent {

int a;

parent() {

System.out.println("in parent");

a = 10;

}

void method() {

System.out.println(a);

}

}

class child extends parent {

int a;

child() {

System.out.println("in child");

a = 11;

}

}

public class Test {

public static void main(String args[]) throws IOException {

parent p1 = new child();

p1.method();

}

}

我得到的输出是

在父母

在孩子

10

有人可以让我理解为什么它引用父类的实例变量a而不是子类的a.

另一个疑问是,我理解隐藏方法,当父类中有静态方法时,子类也声明了具有相同签名的静态方法.这里隐藏的意思?什么方法被隐藏了?如果它的父方法可以请你解释一下吗?

提前致谢.

解决方法:

>无法在子类中重写Java实例变量. Java继承不起作用.

>在您的示例中,没有隐藏(或覆盖或重载)方法的方法.

>虽然隐藏了实例变量.在类child中,a的声明隐藏了父级的声明,而子类中对a的所有引用都引用了child.a而不是parent.a.

为了更清楚地说明这一点,请尝试运行:

public static void main(String args[]) throws IOException {

child c1 = new child();

parent p1 = c1;

System.out.println("p1.a is " + p1.a);

System.out.println("c1.a is " + c1.a);

System.out.println("p1 == c1 is " + (p1 == c1));

}

它应该输出:

p1.a is 10

c1.a is 11

p1 == c1 is true

这表明有一个对象具有两个不同的字段,称为…,如果访问允许,您可以获取它们的两个值.

最后,您应该学会遵循标准的Java标识符约定.类名应始终以大写字母开头.

标签:java,oop

来源: https://codeday.me/bug/20190929/1830344.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值