[英]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.