使用Java抽象方法中的继承类标识方法的签名

Bor*_*jaX 7 java oop inheritance abstract

我知道这是一个非常简单的问题,但是我已经在Python工作了很长时间,现在我必须回到Java,我似乎在更换芯片时遇到了问题,并且围绕着Java的基本多态性.

是否可以abstract使用其中一个继承的类作为参数覆盖(实现,确切地说)Java中的类方法?

让我用一个非常简单的例子来解释(遵循"几乎官方"的 形状示例)

class Shape {}
class Circle extends Shape {}
class Triangle extends Shape {}

abstract class ShapeDrawer {
    abstract void draw(Shape s); 
}                       
class CircleDrawer extends ShapeDrawer {
    void draw(Circle c){
        System.out.println("Drawing circle");
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有让Java识别的任何方式draw的方法CircleDrawer类作为抽象的实施drawShapeDrawer?(Circle班级从Shape毕竟延伸)

否则说:我想要的是类的draw方法CircleDrawer只接受类型的实例Circle,但同时,我想告诉Java编译器它void draw(Circle c)实际上是abstract void draw(Shape s)位于其父类中的抽象方法的实现类.

先感谢您.

loo*_*une 7

您可以通过泛型来解决您的问题:

public abstract class ShapeDrawer<T extends Shape> {
    public abstract void draw(T shape);
}

public class CircleDrawer extends ShapeDrawer<Circle> {
    public void draw(Circle circle) { ... }
}
Run Code Online (Sandbox Code Playgroud)