Java 从子类方法保护超类方法

Java 从子类方法保护超类方法,java,class,inheritance,methods,Java,Class,Inheritance,Methods,一个类是否有可能拥有一个只能由它的对象调用的方法,并为一个子类对象隐藏?例如: class ClassOne { ... // attributes public void doSomething() { ... } } class ClassTwo extends ClassOne { ... // attributes and methods } ClassOne c1 = new ClassOne(); c1.doSomething(); // ok to c

一个类是否有可能拥有一个只能由它的对象调用的方法,并为一个子类对象隐藏?例如:

class ClassOne {
    ... // attributes

    public void doSomething() { ... }
}

class ClassTwo extends ClassOne {
    ... // attributes and methods
}

ClassOne c1 = new ClassOne();
c1.doSomething(); // ok to call

ClassTwo c2 = new ClassTwo();
c2.doSomething(); // forbidden
我知道这种想法在继承论中似乎很奇怪,但这有可能吗


PS:这个问题的目的只是为了了解更多关于OO编程继承的知识。

这是不可能的,你有权认为这会破坏继承。考虑

ClassOne c2 = new ClassTwo();
c2.doSomething(); // what to do?

这必须起作用,因为二班一班。编辑:如果方法被重写并执行其他操作,则至少必须编译,这取决于您的设计。但是您不能让编译器在这方面产生错误。

因为doSomething是在classOne中声明的,所以它在任何子类中都可用。您不能隐藏它或降低它的可见性(将其设置为私有或受保护)。因为二级是一级,它可以做一级所能做的一切

你能到达的最近点是:

class ClassTwo extends ClassOne {
   public void doSomething() { throw new UnsupportedOperationException(); }
}
这并不是你想要的

如果您处于一种需要做到最好的情况下,那么可能需要将类层次结构重新考虑为具有doSomething方法的类类型和不具有doSomething方法的类类型

public class Parent { ... }
public class ClassOne extends Parent {
   public void doSomething(){ ... }
}
public class ClassTwo extends Parent { 
}

或者将doSomething放入一个界面。

可能我误解了您的意思,但为什么不将您的方法设置为私有或包可见?

谢谢。实际上,我不需要实现。我只是对这种行为感到好奇。谢谢。这正是我所想的。如果方法被标记为private,我们就不能使用超类引用调用该方法(除非代码在同一个类中)。但是在这个问题上,没有关于通过超类变量调用的词语。我想这只是示例中的错误。