当前位置: 首页 > 面试题库 >

Java,无法降低从对象继承的方法的可见性

周睿范
2023-03-14
问题内容

继续这个问题:为什么不能降低Java子类中方法的可见性?

我需要创建B几乎与class相同的类A,除了B不能做某些可以做的事情A

作为一个懒惰的程序员,我试图继承A,只是为了迎接B无法降低A方法可视性的错误。h!..

现在A是供应商提供的API,我的意图是封装此API,以便更易于使用。

我想知道解决此问题的最佳实践是什么?


问题答案:

两种选择:

如果您需要B与保持相同的接口A(以便客户端代码可以使用这两个方法中的任何一个而无需更改),则可以覆盖其中的“禁止”方法B并使它们抛出UnsupportedOperationException。例如:

public class A
{
    public int allowedMethod() { ... }
    public int forbiddenMethod() { ... }
}

public class B extends A
{
    public int forbiddenMethod()
    {
        throw new UnsupportedOperationException("Sorry, not allowed.");
    }
}

或者,如果您确实希望的API是的API的B子集A,则只需B包含的实例A,并适当地委托方法调用即可。

    public class A
    {
        public int allowedMethod() { ... }
        public int forbiddenMethod() { ... }
    }

    public class B
    {
        private A a;

        public int allowedMethod()
        {
            return a.allowedMethod();
        }
    }


 类似资料:
  • 问题内容: 我收到此编译器错误: 您不能降低继承方法的可见性。 我有以下代码 在此,父类具有公开的方法,并由私有的子类覆盖。现在,编译器抛出了我无法降低可见度的错误。从技术上讲,每当我创建一个分配给类型父对象的对象时,由于该方法被覆盖,因此将始终调用TestClass的func(),那么为什么还要注意可见性呢?这个错误背后的原因是什么?有人可以清楚地解释我吗? 问题答案: 这是因为子类有知名度的方

  • 问题内容: 我有一个类结构,我希望可以从直接从基类派生的类访问基类中的某些方法,但不能从派生类派生的类访问这些方法。根据Java语言规范,可以在继承的方法上覆盖访问规范,以使它们更公开,但不更私有。例如,这是我需要做的要旨,但是是非法的: 有什么办法可以做到这一点? 编辑以解释我为什么要这样做: 在这种情况下,类结构是数据处理和导入结构。它读入并解析充满表格数据的文本文件,然后将它们存储在数据库中

  • 问题内容: 当您在子类中重写某个方法时降低了其可见性时,为什么编译器会给出错误消息? 问题答案: 因为子类的每个实例仍然需要是基类的有效实例(请参见Liskov替换原理)。 如果子类突然失去了基类的一个属性(例如,一个公共方法),那么它将不再是基类的有效替代品。

  • 我有一个父类,它定义了链表方法(返回“this”的方法)的集合。我想定义多个子类,这些子类包含自己的链式方法,但也“重写”父方法,以便返回子类的实例而不是父类。 我不想在每个子类中重复相同的方法,这就是为什么我有一个父类,其中包含所有子类共享的方法。谢谢

  • 面向对象编程很重要的一个方面,就是对象的继承。A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法。这对于代码的复用是非常有用的。 大部分面向对象的编程语言,都是通过“类”(class)实现对象的继承。传统上,JavaScript 语言的继承不通过 class,而是通过“原型对象”(prototype)实现,本章介绍 JavaScript 的原型链继承。 ES6 引入了 class

  • 我对EasyMock(3.1)类的模拟有些困难。这应该适用于模拟部分类实现,我认为,这对于单元测试抽象基类,同时模拟缺少的方法是非常理想的。这是一个模式-一个立即识别的经典... 现在的测试是: EasyMock似乎不喜欢这样。它抛出: 有什么想法吗?我发现了一个相关的问题,但它并不是真正公正的标题。