是否可以在重写方法中使用专门的参数?

use*_*116 2 java abstract-class overriding

假设我有一个名为"shape"的抽象父类,并且有多个子类(三角形,正方形,圆形......).我想在父"shape"类中定义一个抽象方法,所有子类都必须实现,我们称之为"draw".因此,所有形状子类都必须提供"draw()"方法.但是,draw方法采用"Stencil"类型的参数,并不是每个形状子类都可以使用任何模板......

因此,有一个抽象的"形状"类,多个形状子类和多个模板.我需要在shape类中定义一个draw方法.正方形可能使用Stencil1,圆圈可能使用Stencil2.

我猜这些泛型可以解决问题,但我不确定.每个形状子类都需要使用特定的模板定义draw方法,因为这些类也被其他类使用,编译器应该强制所有程序员使用该类支持的模板调用draw方法.我们不能定义像"public abstract void draw(Stencil s)"这样的抽象方法,因为那时程序员可以将任何模板传递给square类,而square类只支持"Stencil1"

有任何想法吗?

Update1: 应该补充一下,shape类不关心子类使用哪个模板,但由于子类也在其他类中使用,因此定义draw方法以便编译器只接受支持的模板是很重要的. .

ala*_*irg 7

public abstract class Shape<S extends Stencil>
{
   public abstract void draw( S stencil );
}

public class Square extends Shape<Stencil1>
{
   public void draw( Stencil1 stencil )
   {
     stencil.letsdo();
     stencil.some();
     stencil.drawing();
   }
}

public class Circle extends Shape<Stencil2>
{
   public void draw( Stencil2 stencil )
   {
      stencil.some();
      stencil.more();
      stencil.drawing();
   }
}
Run Code Online (Sandbox Code Playgroud)