Java继承和后期绑定,为什么int id具有父类值而不是子类1?

前端之家收集整理的这篇文章主要介绍了Java继承和后期绑定,为什么int id具有父类值而不是子类1?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
确定输出
public class Test1{
    public static void main(String args[]){
        ChildClass c = new ChildClass();
        c.print();
    }
}

class ParentClass{
    int id = 1;
    void print(){
       System.out.println(id);
    }
}

class ChildClass extends ParentClass{
    int id = 2;
}

我知道答案是1,我猜这是因为因为在ChildClass中没有覆盖print函数,所以它与ParentClass中的定义相同.为什么ID不是子类中给出的ID,因为Java使用后期绑定?

解决方法

print方法的唯一版本是在Parent类中,它只在Parent的id字段上具有可见性.

为了打印Child的id,你必须使用完全相同的成语@Override打印方法,当在Child的实例上调用时打印Child的id(如果存在),或者如果可见且没有id,则打印Parent的id字段已在儿童中宣布.

如果您将此代码添加到您的ChildClass:

void print() {
   System.out.println(id);
}

ChildClass现在声明int id = 2,而ChildClass实例上的print的任何调用都将打印2.

或者,ChildClass不声明id和print将打印1提供的ParentClass和ChildClass在同一个包中(您的id字段是ParentClass中的default-access).

原文链接:https://www.f2er.com/java/130136.html

猜你在找的Java相关文章