【问题标题】:How to force private visibility to child's method on an abstract class abstract method?如何在抽象类抽象方法上强制对子方法的私有可见性?
【发布时间】:2015-02-09 01:34:32
【问题描述】:

我想强制我的抽象类孩子将我的抽象方法实现为私有的。 那可能吗?

【问题讨论】:

  • 动机是什么?
  • protected 有什么问题?
  • 抽象类有一个最终方法 beFit(),它调用已实现的抽象方法 run() 和 feedBetter()。我希望这些方法不能在包中访问
  • 必须是 protected
  • 提供原因,我们或许可以提供解决方案

标签: java polymorphism private abstract


【解决方案1】:

覆盖方法的可见性不能低于被覆盖方法的可见性。 也就是说,您不能覆盖公共方法并使其受保护或私有。

由于抽象方法要么是受保护的,要么是默认的公共方法(因为它们应该被子类覆盖),所以方法的实现不能是私有的。

【讨论】:

    【解决方案2】:

    首先@Ravinder Reddy 的回答是绝对正确的,如果不接受我的条款和条件(“使用风险自负”),您不应使用我的示例。

    我不能说它漂亮或有用,但我认为你可以这样做:

    public abstract class Master {}
    
    public abstract class Super extends Master{
        protected abstract void foo();
    }
    
    public class Sub extends Master {
    
        private Inner inner = new Inner();
    
        private void foo() {
            inner.foo();
        }
    
        private class Inner extends Super {
            @Override
            protected void foo() {
                System.out.println("foo");
            }
        }
    
    }
    

    PS:我不认为它有任何用处(我什至不确定这是否有效)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-05
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      相关资源
      最近更新 更多