考虑一个名为
我认为这是多态的一个例子,因为我们在运行时不知道将调用哪个绘制方法。解释说:“在调用shape.draw()时,编译器在编译时看到Shape接口中的draw(),而JVM在运行时调用Triangle类中的draw()。Circle类中的draw()也是如此。” 我的疑问是,这真的可以称为多态吗?由于new Triangle()或new Circle()是硬编码的,编译器是否总是知道它指向子类的draw()方法?
Shape
的接口,它有一个draw()
方法。两个类Triangle
和Circle
实现了Shape
接口并覆盖了draw()
方法。
现在在main
中我有下面这段代码:public static void main(String[] args){
Shape shape = new Triangle();
shape.draw();
//Shape shape = new Circle();
//shape.draw();
}
我认为这是多态的一个例子,因为我们在运行时不知道将调用哪个绘制方法。解释说:“在调用shape.draw()时,编译器在编译时看到Shape接口中的draw(),而JVM在运行时调用Triangle类中的draw()。Circle类中的draw()也是如此。” 我的疑问是,这真的可以称为多态吗?由于new Triangle()或new Circle()是硬编码的,编译器是否总是知道它指向子类的draw()方法?
void mainDraw(Shape s) {s.draw();}
,编译器就不会知道它将从哪里调用以及将传递哪个参数(圆形、三角形等)。 - Nir Alfasi