dbr*_*n93 1 java polymorphism inheritance abstract
说我有一个像这样的课程:
abstract class Something {}
Run Code Online (Sandbox Code Playgroud)
它具有一个带有扩展它的类的层次结构:
class FirstSomething extends Something {}
class SecondSomething extends Something {}
Run Code Online (Sandbox Code Playgroud)
然后在其他地方,我有一堂课利用了这些东西:
abstract class A {
public void setSomething(Something something) {
//Process the something
}
}
Run Code Online (Sandbox Code Playgroud)
我是否可以指定A的子类,以便使用更具体的“某物”类覆盖setSomething方法?这就是我想要做的:
class B extends A {
@Override
public void setSomething(FirstSomething something) {
//Process the something
}
class C extends A {
@Override
public void setSomething(SecondSomething something) {
//Set the something
}
Run Code Online (Sandbox Code Playgroud)
目前,我正在A类中执行以下操作:
public void setSomething(Something something) {
checkClass(something);
//Use the something
}
protected abstract void checkClass(Something something);
Run Code Online (Sandbox Code Playgroud)
如果SuperSomething的类型不适合这些类,则B类和C类在checkClass方法中引发异常。
编辑:我已经尝试使用上述确切的方法签名,但是子类方法不会覆盖超级方法,我想我真的是在问:有没有一种方法可以在超级类的定义中指定一个方法,是否在编译时检查超类的子类的setSomething方法中允许的对象类型?
您可以通过指定类型可以是A类Something或它的子类之一来使A类通用(我已将setSomething方法抽象化,但可以根据需要提供实现)。
abstract class A <T extends Something> {
public abstract void setSomething(T something);
}
Run Code Online (Sandbox Code Playgroud)
然后,将类型T强制为您想要在子类中使用的特定类。
class B extends A<FirstSomething> {
@Override
public void setSomething(FirstSomething something) {
//Set the something
}
}
class C extends A<SecondSomething> {
@Override
public void setSomething(SecondSomething something) {
//Set the something
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
520 次 |
| 最近记录: |