【问题标题】:How prevent a method of super in subclass (java) [duplicate]如何防止子类中的超级方法(java)[重复]
【发布时间】:2017-03-27 05:53:09
【问题描述】:

请注意这一点。 我有一个超级班

class A
{
    public void update(int num)
    {...}
}

还有其他课程。继承A类

class B extends A
{
   public void update(string str)
   {...}
}

B obj = new B();
obj.update(50); // oh no, bad
obj.update(""); // yes

现在,我希望当我从 B 类创建新时,A 类的 update() 不能访问。 - 换句话说,我只想访问 B 的 update() 方法

【问题讨论】:

  • 您所做的就像重载update 方法,因为它具有相同的名称但不同的参数。因此,在您的情况下,请使用字符串,这样您就可以防止超级类的更新。
  • 如果是这样的话,那么从设计的角度看B不是A的子类,所以你的整个设计是不正确的,如果有人遇到这种需求,请先审查设计。跨度>

标签: java inheritance subclass superclass


【解决方案1】:

只有当你在超类型和子类型中具有相同的方法名称和相同的参数时,你才能防止这种情况有效地覆盖它。在您的情况下,签名的方法不同..它们采用不同的参数,因此根据您作为参数传递的内容,它会调用相应的方法。

【讨论】:

    【解决方案2】:

    其实你可以重写那个方法并抛出异常是一个解决办法。

    class A
    {
        public void update(int num)
        {...}
    }
    
    class B extends A
    {
       public void update(int i) { 
           throw new UnsupprotedOperationException();
       }
       public void update(string str)
       {...}
    }
    

    或者你可以用泛型实现一个类。这可能行不通,但想法行得通。

    class A<T>
    {
        public void update(T num)
        {...}
    }
    
    class B extends A<String>
    {
       public void update(String str)
       {...}
    }
    

    【讨论】:

      【解决方案3】:

      将您的基类方法设为私有。

      class A
      {
          private void update(int num)
          {
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-04-11
        • 1970-01-01
        • 2017-08-27
        • 2017-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-14
        • 1970-01-01
        相关资源
        最近更新 更多