我做了一个小玩具程序来复制我在一个更大的项目中遇到的问题。在下面的代码中,类A是类B继承的父类。ClassB添加了一个名为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类的对象?我如何让编译器识别一个方法实际上存在?
请注意:当B扩展A时,所有B都是A,但不是相反。
在你的例子中,Binstance是A,然后不能访问B的printStuff方法。
为了使您的代码正常工作,您需要强制B实例为B类型;这在java中称为强制转换。
所以这应该可以工作:(A(B实例). printStuff();
快乐的编码!
bin实例
被声明为具有类型A,并且printStuff()
不在A中声明,而是在
B中声明。在这种情况下,只有A的方法可见。方法在那里,但不可见。要使其可见,请将bin实例声明为B。
B Binstance = new B("B instance");
Binstance.printStuff();
在编译期间,我们只知道B实例对象是A类型,这意味着它对printStuff()方法(您在B类中声明的)一无所知,这就是您得到该错误的原因。
现在,你有两个选择:
>
你可以使用石膏
public static void main(String[] args) {
A Binstance = new B("B instance");
((B)Binstance).printStuff(); //casting Binstance to B
}
您可以将类设为抽象类,并创建一个抽象方法-printStuff()
abstract class A {
abstract void printStuff();
}
问题内容: 我想用主方法创建一个简单的Java类,但是在编译代码时,出现以下错误消息: 错误:在类error.TestErrors中找不到主方法,请将主方法定义为:public static void main(String [] args) 这是源代码: 为什么我看到此错误,如您所见,我已经声明了main方法! 问题答案: 正如我在评论中所说,您似乎已经在自己的类中声明了一个类。为了证明这一点,
如何正确拆分字符串,使Words[1]实际上是?谢谢你的帮助!
null 同样的道理是什么?-理想情况下,访问子类的方式本质上是相同的-那么为什么会有这种限制呢?
问题指出: 创建一个具有长度和宽度双属性的矩形类。默认构造函数应该将这些属性设置为1。提供计算矩形周长和面积的方法,以及两个数据字段的访问器和赋值器。length和width的mutator方法应该验证传入的数字是否大于0.0且小于20.0——如果不符合这些标准,就不应该更改字段的值。 在同一文件中编写一个驱动程序类来测试您的矩形类。它应该提示用户输入矩形的长度和宽度,然后打印出矩形的面积和周长。
问题内容: 我正在尝试实现UITableViewDataSource的必需方法,但出现一个奇怪的错误: “无效的’tableview(_:cellForRowAtIndexPath :)重新声明’” 但是我不确定是什么问题。这是相关的两行代码,即类的声明和符合协议/超类的代码: 以及触发错误的函数声明: 问题答案: 您在课堂上有两次此功能。搜索它并删除其中之一。
我试图将我的应用程序从Java转换为静态编程语言。 我使用了Android Studio内置转换器并修复了它生成的大部分错误。 对于科特林来说,这一次让我很难受: 我得到了这个用Java编写的类,并进行了转换,显然没有任何错误,这有助于我在回收视图中管理项目点击: 在main活动中,转换后在函数中设置如下: IDE给我以下错误: 类型不匹配: 必需:ItemClickSupport。OnItemC