什么是写作的好处:继承Java中实例化类多态性
Bicycle bike = new RoadBike(...);
,而不是
RoadBike bike = new RoadBike(...);
假设,当然RoadBike extends Bicycle
。
我问,因为即使我写
RoadBike bike = new RoadBike(...);
我仍然可以使用所有Bicycle
因为扩展的方法,那么,什么是写它的其他方式的意义呢?
谢谢!
什么是写作的好处:继承Java中实例化类多态性
Bicycle bike = new RoadBike(...);
,而不是
RoadBike bike = new RoadBike(...);
假设,当然RoadBike extends Bicycle
。
我问,因为即使我写
RoadBike bike = new RoadBike(...);
我仍然可以使用所有Bicycle
因为扩展的方法,那么,什么是写它的其他方式的意义呢?
谢谢!
表达多态性最明显的方式通过一个抽象基类(或接口)是点
public abstract class Bicycle
{
...
public abstract void ride();
}
这个类是抽象的,因为ride()方法没有为Bicycle定义。它将被定义为RoadBike和MountainBike的子类。另外,自行车是一个抽象的概念。它必须是一个或另一个。
所以我们推迟使用抽象类的实现。
public class RoadBike extends Bicycle
{
...
@Override
public void ride()
{
System.out.println("RoadBike");
}
}
和
public class MountainBike extends Bicycle
{
...
@Override
public void ride()
{
System.out.println("MountainBike");
}
}
现在我们可以通过调用自行车在运行时的基类自行车,但由于运行时绑定相应的子类方法的差异将被调用。
public static void main(String args)
{
ArrayList<Bicycle> group = new ArrayList<Bicycle>();
group.add(new RoadBike());
group.add(new MountainBike());
// ... add more...
// tell the class to take a pee break
for (Bicycle bicycle : group) bicycle.ride();
}
运行,这将产生:
RoadBike
MountainBike
...
希望这将清除您有什么区别!
优点是Bicycle
引用是更通用的,可以引用任何在其继承层次结构中具有Bicycle
的对象,例如MountainBike
。它提供了更多的灵活性,并且不会将您绑定到具体的实施。这是面向对象的基本原理之一。也就是说,有些情况下,如使用简短方法时使用Bicycle
或RoadBike
没有区别。另外还有调用重载方法的方面,它由编译时的引用类型决定(取决于引用类型,即使认为它们指向同一对象也可能调用不同的方法),但不建议使用这些类型的重叠方法。
您可能会得到更好的解释here。
如果Bicycle是一个接口,它将允许您传递接口并使您的方法更“通用”或“多态”。
如果您有另一个课程StreetBike
(并且它实现了Bicycle接口),那么您可以使用该类和RoadBike
来说出调用方法'搭乘',并且每个课程会根据实施情况采取不同的搭乘方式。
Public Interface Bicycle {
public ride();
}
public StreetBike implements Bicycle{
public ride(){
System.out.println("I am riding on the street");
}
}
public RoadBike implements Bicycle{
public ride(){
System.out.println("I am riding on the road");
}
}
把它更进了一步,我们可以用这个简单的例子,但我认为它得到跨
//PERSON POJO
public Person {
//properties
public rideBike(Bicycle bike){
bike.ride(); //could be StreetBike or RoadBike, depends on what you pass in. That's the power of it.
}
}
请参阅[Java多教程教程](http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html)。它很好地描述你的例子。 –