如何确保Java类中的两个方法中至少有一个被重写?

如何确保Java类中的两个方法中至少有一个被重写?,java,oop,inheritance,Java,Oop,Inheritance,我有一个基本Java类,它有两个类似的方法: 类基{ 公共无效流程A(某些类别sc,Args Args); 公共无效流程B(另一类ac,Args argc); } 我想创建一个子体,它必须实现基类的这两个方法中的至少一个。例如,我认为下面的变体是正确的(好”< /强>: 类ChildA扩展了基{ 公共无效流程A(某些类别sc,Args Args); } 类ChildB扩展了基{ 公共作废流程B(另一类ac,Args Args); } 但以下变体是错误的(我们称之为“坏的”): 类ChildC

我有一个基本Java类,它有两个类似的方法:

类基{
公共无效流程A(某些类别sc,Args Args);
公共无效流程B(另一类ac,Args argc);
}
我想创建一个子体,它必须实现基类的这两个方法中的至少一个。例如,我认为下面的变体是正确的(<强>好”< /强>:

类ChildA扩展了基{
公共无效流程A(某些类别sc,Args Args);
}
类ChildB扩展了基{
公共作废流程B(另一类ac,Args Args);
}
但以下变体是错误的(我们称之为“坏的”):

类ChildC扩展了基{
/*这里什么都没有*/
}
因此,问题是必须如何实现/指定方法
过程{A,B}
,以允许在编译时检测child的这种“坏”和“好”实现

现在我使用运行时检测,如下所示:

类基{
公共void进程A(SomeClass sc,Args Args){
抛出新的NullPointerException(“嘿,伙计,你忘了实现它,但是调用了它。”);
}
公共作废流程B(其他类别ac,Args argc){
抛出新的NullPointerException(“嘿,伙计,你忘了实现它,但是调用了它。”);
}
}

也许还有另一种很好的方法可以做到这一点?

声明您的方法
摘要
。任何用抽象方法扩展类的类都必须实现它们。

你不能这样做,因为它会破坏多态性。由于没有为方法提供实现,因此
应该是
抽象
接口

在您的示例中,必须重写这两个方法

我的方法是改变你的设计。因为我能看到的唯一与你的方法相似的东西就是签名

首先,创建一个实现process方法的具体类,因此让
Base
类松散耦合,就可以传递不同的类

如果希望有多个流程,还可以使用设计模式扩展您的范例


一种更简单的方法是生成一个空的实现

这听起来像是一个错误;你为什么要这么做?@OliCharlesworth我正在重构一段旧代码,并面临着这个问题。您的问题让我产生了这样一个想法,即这样一个奇怪的代码可能是类的糟糕体系结构造成的。基类可以分为两个不同的类。如果我的想法失败,我将写另一个问题,并对我的问题进行架构描述。谢谢你的链接!他说至少有一个意味着可以留下一个,然后为一个做一个空的实现。从他的例子来看,他似乎不想让其他人忘记他们需要实施,而不是只有一个必须实施。