我收到此编译器错误:
您不能降低继承方法的可见性。
我有以下代码
class Parent {
public void func() {
System.out.println("in Parent");
}
}
public class TestClass extends Parent {
public static void main(String args[]) {
parent obj=new TestClass();
obj.addTest();
}
private void func() {
System.out.println("in child");
}
}
在此,父类具有func()
公开的方法,并由TestClass
私有的子类覆盖。现在,编译器抛出了我无法降低可见度的错误。从技术上讲,每当我创建一个TestClass
分配给类型父对象的对象时,由于该func()
方法被覆盖,因此将始终调用TestClass的func(),那么为什么还要注意可见性呢?这个错误背后的原因是什么?有人可以清楚地解释我吗?
这是因为子类有知名度private
的void func()
方法,但是超有知名度public
。
如果您的代码被允许编译,那么您将在运行时爆炸:
parent p = new TestClass();
p.func(); // boom - func is public in parent, but TestClass's impl is private, so no access would be allowed
要“修复”此问题,请使用子类的func
方法public
:
public class TestClass extends parent {
...
public void func() { // give it public visibility
System.out.println("in child");
}
}
并且请使用标准的命名约定;在这种情况下, “课程应以大写字母开头” -即Parent
不是parent
问题内容: 继续这个问题:为什么不能降低Java子类中方法的可见性? 我需要创建几乎与class相同的类,除了不能做某些可以做的事情。 作为一个懒惰的程序员,我试图继承,只是为了迎接无法降低方法可视性的错误。h!.. 现在是供应商提供的API,我的意图是封装此API,以便更易于使用。 我想知道解决此问题的最佳实践是什么? 问题答案: 两种选择: 如果您需要与保持相同的接口(以便客户端代码可以使用这
问题内容: 我有一个类结构,我希望可以从直接从基类派生的类访问基类中的某些方法,但不能从派生类派生的类访问这些方法。根据Java语言规范,可以在继承的方法上覆盖访问规范,以使它们更公开,但不更私有。例如,这是我需要做的要旨,但是是非法的: 有什么办法可以做到这一点? 编辑以解释我为什么要这样做: 在这种情况下,类结构是数据处理和导入结构。它读入并解析充满表格数据的文本文件,然后将它们存储在数据库中
我想知道如何获取一个方法的返回值,并在直接跟随它的另一个方法中使用它。例如,假设我这样做了: 在这里,我想使用乘法方法中的4作为一个值,然后使用加法方法将我给它的任何值加到乘法结果4上。 注意:我知道我可以做到: 但是我想知道如何使用这种格式。 我想完成的是: 当我运行它时,输出将是 9,因为 2 * 2 = 4 5 = 9。请向我解释一下:)
本文向大家介绍C#继承方法,包括了C#继承方法的使用技巧和注意事项,需要的朋友参考一下 示例 有几种方法可以继承
嘿,我正在尝试调用子类方法(ChildClass扩展了超类()) 它没有看到ChildClass方法,我只能调用SuperClass()中的方法,我知道这可能是一个愚蠢的问题,但无论如何干杯
问题内容: 当您在子类中重写某个方法时降低了其可见性时,为什么编译器会给出错误消息? 问题答案: 因为子类的每个实例仍然需要是基类的有效实例(请参见Liskov替换原理)。 如果子类突然失去了基类的一个属性(例如,一个公共方法),那么它将不再是基类的有效替代品。