Java 多态性和参数?

Java 多态性和参数?,java,inheritance,polymorphism,Java,Inheritance,Polymorphism,因此,我理解,由于多态性,一个人可以: 超类Apt=新的子类; 但我想知道的是: Superclass Abc = new Subclass(); do(Abc); void doThat(Superclass Abc) Abc.Ball(); 因此,在方法dotThat内部的Abc.method调用中,它是调用超类的Ball方法,还是调用子类的Ball方法,假设子类已重写Ball方法。如果它确实调用了子类的重写Ball方法,为什么我们不能将方法doThat改为:void doThat

因此,我理解,由于多态性,一个人可以: 超类Apt=新的子类; 但我想知道的是:

Superclass Abc = new Subclass(); 
do(Abc);
void doThat(Superclass Abc)
   Abc.Ball();

因此,在方法dotThat内部的Abc.method调用中,它是调用超类的Ball方法,还是调用子类的Ball方法,假设子类已重写Ball方法。如果它确实调用了子类的重写Ball方法,为什么我们不能将方法doThat改为:void doThat Subclass Abc。谢谢你的帮助,如果没有意义,我会进一步澄清

如果Ball方法是静态的,它将调用超级类,因为Ball方法是在类级别定义的,而如果它是在对象级别定义的,那么它肯定会调用子类上的重写方法。

如果Ball方法是静态的,它将调用超级类,因为Ball方法是在类级别定义的,而如果它是在对象级别定义的,然后它肯定会调用子类上的重写方法。

在您描述的情况下,调用

Abc.Ball();

将在子类中调用实现。

在您描述的情况下,调用

Abc.Ball();

将调用子类中的实现。

它正在调用重写的方法,而重写的方法正是针对该方法的

void doThat(Subclass Abc)
如果您在这里使用子类,则只能将子类实例传递给此。相反,如果你有

void doThat(Superclass Abc)
然后,您可以传递实现了多态性所在的超类的任何对象。如果该方法接受多种类型的对象,唯一的要求是它应该实现超类

如果我进一步解释, 假设您有两个子类,子类1和子类2,它们是超类的实现,其中超类是一个接口。这些子类应该实现超类方法定义,因此这两个子类都有ball方法


然后,无论实例到达doThat方法,它都会调用相应对象的ball方法。由于void dothat超类Abc接受超类类型。

它正在调用重写的方法,该方法是重写的对象

void doThat(Subclass Abc)
如果您在这里使用子类,则只能将子类实例传递给此。相反,如果你有

void doThat(Superclass Abc)
然后,您可以传递实现了多态性所在的超类的任何对象。如果该方法接受多种类型的对象,唯一的要求是它应该实现超类

如果我进一步解释, 假设您有两个子类,子类1和子类2,它们是超类的实现,其中超类是一个接口。这些子类应该实现超类方法定义,因此这两个子类都有ball方法

然后,无论实例到达doThat方法,它都会调用相应对象的ball方法。作为void dothat超类Abc接受超类类型

这是调用超类的Ball方法还是调用子类的Ball方法

Ball将调用子类中的重写方法

如果它确实调用了子类的重写Ball方法,为什么我们不能将方法doThat改为:void doThat Subclass Abc

假设您有两个子类的超类:

定义void dothatsuberclass abc意味着方法doThat将接受作为超类或其任何子类实例的任何对象。然后可以执行doThatabc和doThatxyz,这两种方法都将在适当的实例中调用Ball方法

相反,如果您有dothatsublassaabc,那么对于超类的每个子类,您也需要一个特定的方法,比如dothatsublasszxyz

这是调用超类的Ball方法还是调用子类的Ball方法

Ball将调用子类中的重写方法

如果它确实调用了子类的重写Ball方法,为什么我们不能将方法doThat改为:void doThat Subclass Abc

假设您有两个子类的超类:

定义void dothatsuberclass abc意味着方法doThat将接受作为超类或其任何子类实例的任何对象。然后可以执行doThatabc和doThatxyz,这两种方法都将在适当的实例中调用Ball方法

相反,如果您有dothatsublassaabc,那么对于超类的每个子类,您也需要一个特定的方法,比如dothatsublasszxyz