SuperClass object = new SubClass();
Run Code Online (Sandbox Code Playgroud)
为什么使用超类来实例化上面的子类对象?因为我学习实例化对象的唯一方法是:
SubClass object = new SubClass();
Run Code Online (Sandbox Code Playgroud)
我正在学习java.
Jus*_*ner 15
您可能有一个只接受实例的方法SuperClass.既然SubClass 是a SuperClass,你可以使用一个实例SubClass并将其视为SuperClass.
使用接口时使用相同的行为:
List someList = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
这就是多态的美.它允许您在不破坏其余代码的情况下更改类内部的实现.
axc*_*dnt 14
这被称为多态性.想象一下以下示例:
Musician musician = new Pianist();
Run Code Online (Sandbox Code Playgroud)
要么
Musician musician = new Drummer();
Run Code Online (Sandbox Code Playgroud)
假设Musician类有一个方法:play().无论音乐家是谁,如果你称之为游戏方法,你就会知道如何演奏确定的乐器,基于具体的课程,在这种情况下,无论是钢琴家还是鼓手.
每个具体的类,覆盖它的play()方法,可以自己玩:
例如Pianist上课:play() { playsBeethoven(); }
有关详细信息,请查看http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html
记住将它与继承一起使用总是好的http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
做前者的主要原因是对期望超类的函数调用.如果你有一个类A有这样的方法
public static void insert(SuperClass b) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
你有
SuperClass object = new SubClass();
Run Code Online (Sandbox Code Playgroud)
你可以做
A.insert(object);
Run Code Online (Sandbox Code Playgroud)
但如果你这样做
SubClass object new SubClass();
Run Code Online (Sandbox Code Playgroud)
你不能这样做
A.insert(object);
Run Code Online (Sandbox Code Playgroud)
除非你向A添加这样的方法
public static void insert(SubClass b) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
这有助于减少冗余或复制的代码并使事情更清晰.