相关疑难解决方法(0)

如何限制子类修改Abstract类中方法的范围?

如何限制Abstract类的实现类将方法的范围从protected修改为public?

例如:假设我有一个抽象类

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();

    }

}
Run Code Online (Sandbox Code Playgroud)

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

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[] …
Run Code Online (Sandbox Code Playgroud)

java oop inheritance scope

4
推荐指数
3
解决办法
855
查看次数

与C++相比,为什么在覆盖时不能缩小方法可见性?

以下程序失败:

abstract class A {
  protected void method() {}
}

class B extends A {
  private void method() {}
}

public class main{
     public static void main(String []args) {}
}
Run Code Online (Sandbox Code Playgroud)

有:

main.java:6: error: method() in B cannot override method() in A
  private void method() {}
               ^
  attempting to assign weaker access privileges; was protected
1 error
Run Code Online (Sandbox Code Playgroud)

将派生方法设置为protected/private.

问题:Java不允许您进一步限制子类中的访问权限的原因是什么?我将此与C++形成对比,C++具有完全相反的规则.

java oop inheritance

3
推荐指数
2
解决办法
171
查看次数

标签 统计

inheritance ×2

java ×2

oop ×2

scope ×1