繁体   English   中英

继承和静态类型java

[英]Inheritance and static type java

自从学习Java语法以来,我一直在玩类,并且遇到了这种奇怪的情况。 因此,给定A类和B类:

public class A {
     public int x() {
         return x;
     }
}

public class B extends A {
    int x = 5;
    public int x() {
        return x + 2;
    }
    public static void main(String[] args) {
        B b = new B();
        System.out.println(b.x());
}

当我执行main方法时,我收到一个编译时错误,它找不到x变量,并且从A调用该方法,因为该错误显示return x而不是return x + 2 由于b的静态类型为B ,为什么要在A寻找x

error: cannot find symbol

return x;

symbol: variable x
location: class A

A知道它将被x变量存在的B扩展。

为了进行此编译,请使Ax()抽象并在子类中提供实现:

public abstract class A {
     public abstract int x();
}

public class B extends A {
    int x = 5;

    @Override
    public int x() {
        return x + 2;
    }
..
}

当创建类B的对象时,它会自动调用类A的x(),但是x不会在该类中初始化。 由于它是局部变量,因此必须先进行初始化才能使用。 所以它给出了一个错误。

试试下面的代码,它可以正常工作

class A 
{
    int x =10;
    public int x() 
    {
        return x;
    }
}
class B extends A
{
    int x = 5;
    public int x() 
    {
        return x + 2;
    }
    public static void main(String[] args) 
    {
        B b = new B();
        System.out.println(b.x());
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM