当前位置: 首页 > 知识库问答 >
问题:

如何限制子类修改抽象类中方法的作用域?

吕鸿朗
2023-03-14
package com.rao.test;

public abstract  class AbstractTEClass {

    protected abstract void function1();

    protected abstract void function2();


    protected void doWork() //I want to call the abstract methods from this method.
    {
        function1(); //implementation classes will give implementation of these methods
        function2();

    }

}

现在,我有了一个扩展上述抽象类的实现类

package com.rao.test;

public class AbstractTEClassImpl extends AbstractTEClass {

    @Override
    public void function1() {
        // TODO Auto-generated method stub
        System.out.println("FUnction1");
    }

    @Override
    public void function2() {
        // TODO Auto-generated method stub
        System.out.println("Function2");
    }


    public static void main(String[] args)
    {
        AbstractTEClassImpl objTEClass = new AbstractTEClassImpl();

        objTEClass.doWork();

    }

}

请注意,我正在将实现类中的2个抽象方法的作用域从protected更改为public,如何限制实现类修改作用域。
欢迎任何设计更改、建议或模式。

共有1个答案

鲁昕
2023-03-14

你不能。

重写类总是可以比它所重写的方法提供更多的方法访问权限。

http://docs.oracle.com/javase/tutorial/java/iandi/override.html阅读关于修饰符的部分

 类似资料:
  • 下面是解释我的情况的基本框架代码。 这是超级抽象类: 这是超级抽象类的一个子类:(注意,我删除了其他函数,比如构造函数和方法,以缩短文章的篇幅 我想在抽象类中使用这种公共无效支付(int金额)方法;然而,超级抽象类Person不会接受支付(付款),因为该方法不在范围内。如何使这个工作? 谢谢~

  • 我通过学校为一项任务提供的简报创建了一个飞机座位预订系统。我遇到了一个我无法解决的主要问题。 摘要说明抽象类必须有一个抽象方法和大约4个公共方法。在抽象类的两个子类中,我们都必须初始化对象数组(所有普通的座位)。然而,一旦它们被初始化,我不知道如何将它们发送回抽象类(该类有一个检查未预订的飞机座位的方法,这就是我需要初始化的座位对象的地方) ArrayIndexOutOfBounds在一个应该在边

  • 问题内容: 如何在C ++中创建一个抽象类,该抽象类具有一些我想在子类中重写的抽象方法?该文件应如何显示?是否有一个,如果是的话,应该看起来如何? 在Java中,它看起来像这样: 对于我来说,将此代码转换为C ++就足够了。 编辑: 我创建了代码,但是当我尝试遍历对象时,出现以下错误: 使用此代码: 问题答案: 在Java中,除非您声明了所有方法,否则默认情况下所有方法都是默认方法。在C ++中,

  • 本文向大家介绍php中的抽象方法和抽象类,包括了php中的抽象方法和抽象类的使用技巧和注意事项,需要的朋友参考一下 1、什么是抽象方法? 我们在类里面定义的没有方法提的方法就是抽象方法。所谓的没有方法体指的是,在声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时方法还要加一个关键字"abstract"来修饰。 例如: 2、什么是抽象类? 只要一个类里面

  • 问题内容: 我想在自己的类中调用抽象类的方法。抽象类是: 我想调用上面的方法,并且调用的类是: 每当我尝试运行上述类时,它都会在line上引发NullPointerException 。谁能告诉我如何解决这个问题? 问题答案: 首先,一个抽象类,因此您不能直接实例化它。您必须创建一个子类,比如说它覆盖Call中的任何抽象方法。 获得一个意味着您作为参数传入的任何内容都尚未初始化。因此,在创建Cal

  • 这似乎是一个基本问题。但在采访前需要澄清。 我在抽象类中有一个非抽象方法。它的具体类重写了该方法。但我想调用父类的原始方法来调用,而不是重写方法。有什么办法吗? 据我所知,没有办法调用原始方法?