这个问题在这里已经有答案了:
从超类调用子类方法(5个答案)
“找不到符号”或“无法解析符号”错误是什么意思(15个答案)
21天前关门了。
我做了一个小玩具程序来复制我在一个更大的项目中遇到的问题。在下面的代码中,类 A
是哪个类的父类 B
继承。班级 B
添加一个名为 PrintStuff
. 在main方法中,我声明类 B
通过提供它的超类。我之所以这样做是因为与实际用例相关的原因:
package com.company;
import java.lang.String;
class A {
String x;
A(String value) {
x = value;
}
}
class B extends A {
B(String value) {
super(value);
}
void printStuff() {
System.out.println(x);
}
}
public class test {
public static void main(String[] args) {
A Binstance = new B("B instance");
Binstance.printStuff();
}
}
但是,由于以下原因,程序无法编译:
C:\Users\me\Desktop\Library\src\com\company\test.java:28:18
java: cannot find symbol
symbol: method printStuff()
location: variable Binstance of type com.company.
为什么java不能认识到实际上我正在示例化一个类的对象 B
? 如何让编译器识别一个方法 printStuff
事实上存在吗?
3条答案
按热度按时间monwx1rj1#
在编译期间,我们只知道binInstance对象的类型是a,这意味着它对printstuff()方法(在类b中声明的)一无所知,这就是为什么会出现这种错误。
现在,您有两个选择:
你可以用石膏
您可以将类设为抽象类并创建一个抽象方法-printstuff()
7rfyedvj2#
Binstance
声明为具有类型A
以及printStuff()
未在中声明A
,但在B
. 唯一的方法A
在这种情况下是可见的。方法在那里,但不可见。要使其可见,请声明Binstance
作为B
.dgenwo3n3#
注意:当b扩展a时,所有b都是a,但不是相反。
所以在您的情况下,binstance是a,然后无法访问
printStuff
b方法。要使代码正常工作,需要强制binstance为b类型;这在java中称为cast。
所以这应该有效:
(A(Binstance).printStuff();
快乐的编码!