当面临一个问题,有多种实现算途径的时候,要想到java中的核心:多态。
多态的思想:
概括地讲,在运用父类引用指向子类对象的情况下,基本上就用到了多态了。
最简单的多态应该是继承:
public class Tank {
public void move() {
System.out.println("I am father");
}
}
public class Tank2 extends Tank{
@Override
public void move(){
System.out.println("I am child a");
}
public class Client {
public static void main(String[] args) {
Tank t2 = new Tank2(); ///父类引用指向了子类对象
t2.move(); ///父类中的move方法,但实际具体的实现是tank2对象对move的实现。
}
}
接口和抽象类的例子:
对于抽象类和接口,有许多类实现这个接口(或者继承这个抽象类)。
在调用的时候,用父类引用指向子类对象的方法。然后,调用对象的方法,编译器就会自动根据这个对象实际属于哪个实现类,
来调出这个类对于接口或者抽象类的具体实现。
例:
public class Address {
private String name;
public Address(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
定义基类(抽象类):
public abstract class Vehicle {
abstract void go(Address address);
}
Car对于基类的实现:
public class Car extends Vehicle{
@Override
public void go(Address address){
System.out.println("Car to " + address.getName());
}
}
Plane对于基类的实现:
public class Plane extends Vehicle{
@Override
void go(Address address) {
System.out.println("Plane to " + address.getName());
}
}
Driver中多态:
public void drive(Vehicle v){ ///多态,父类引用指向子类对象,实际传过来的是抽象类Vehicle的子类,或者实现类,然后编译器会根据具体实现类,来找实现方法。
v.go(new Address("杭州(abstract)")); ///此方法在具体的实现中被重写
}
Test:
public static void main(String[] args) {
Driver d = new Driver();
d.drive(new Plane()); //实际是Plane对象,则编译器就会找到Plane中,对go的实现
d.drive(new Car()); //实际是Car对象,则编译器就会找到Plane中,对go的实现
}
输出结果:
Plane to 杭州(abstract)
Car to 杭州(abstract)
事实上,这就是多态所起的作用,可以实现控制反转这在大量的J2EE轻量级框架中被用到,比如Spring的依赖注射机制。
(通过注入不同的bean,来得到不同的实现类)
接口与抽象类的区别:
有个概念,但还没有想到具体实现。
对于一些共用的,已经有实现了,可以设计成接口。
上面是抽象类,下面把它转化为接口:
IVehicle.java
public interface IVehicle {
public void go(Address address);
}
CarImpl.java
public class CarImpl implements IVehicle{
public void go(Address address) {
System.out.println("CarImpl to " +address.getName());
}
}
PlameImpl.java
public class PlaneImpl implements IVehicle{
public void go(Address address) {
System.out.println("PlaneImpl to " + address.getName());
}
}
Driver.java
////多态之接口
public void driveI(IVehicle v){
v.go(new Address("杭州(interface)"));
}
Test.java
////用接口实现
d.driveI(new PlaneImpl());
d.driveI(new PlaneImpl());
打印结果:
PlaneImpl to 杭州(interface)
PlaneImpl to 杭州(interface)
多态的三要素:1.继承 2.重写 3.父类引用指向子类对象
以上就是我目前学习中的总结,如有不足之处,还望多多赐教。
分享到:
相关推荐
想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件
java 的多态是java的重要的四大特性之一,多态又有多少人真正说的清楚呢?这里有最经典的例子,最生动的最鲜活的例子讲解,相信你一定能学会
java多态的基础知识,你可能了解,但是如何使用?内附例子。究竟如何实现,帮你学习基础。
该资料,是一个多态的例子,充分的掌握多态,让多态得到很好的应用
Java继承与多态专题讲解,详细生动,例子丰富,适合初学者
c#多态,继承,接口,结构例子
继承和多态的相关Java源码下载,比较散,像覆盖和重载、对象类Object和它的toString()方法、多态性、动态绑定和一般程序设计、数组线性表ArrayList类、final类、方法和变量、数据域和静态方法的隐藏、调用父类的方法...
java的多态例子,适合初学者学习java的多态特性
本实例详细阐述java平台下如何实现多态,多态有什么特征,以及需要注意的地方,小例子。
Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页)....
Java课程的一道实验考试题。主要是关于IO(从键盘输入),继承,多态(动态绑定,静态绑定),集合(客户化排序)等内容。感觉对于理解多态和继承还是挺有作用的。
笔者校招面试时被问到了著名问题「C++ 与 Java 如何实现多态」,然后不幸翻车。过于著名反而没有去准备,只知道跟虚函数表有关。面试之后比较了 C++ 和 Java 多态的实现的异同,一并记录在这里。 C++ 多态的虚指针...
先来复习下java多态:java多态指的是父类引用指向子类对象,不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。 接下来我们再说下什么叫策略模式:将每一个算法封装到...
继承和多态简单例子文本文档.txt
主要介绍了java 多态实例代码,具有一定借鉴价值,需要的朋友可以参考下
首先,明确一下,Java多态的三个必要条件: 1、 继承 2、 子类重写父类方法 3、 父类引用指向子类对象 然后看一个例子 package test.xing; class Father{ protected int age; public Father(){ age...
java 重载,继承,重写和多态的区别. 下面的例子包含了这四种实现
3. 使用日期和时间类:演示了Java 8中日期和时间类的用法,包括获取当前日期和格式化日期时间。 4. 实现链表数据结构:展示了如何创建一个简单的链表数据结构,并遍历打印链表的元素。 5. 实现堆栈数据结构:演示了...
4. 解释一下Java中的封装,继承和多态。 5. 解释什么是Java的异常处理?如何使用它? 6. 描述一下Java中的泛型。你如何在你的代码中使用它? 7. 解释一下Java中的接口和抽象类。它们在什么时候使用? 8. 解释一下...
下面小编就为大家带来一篇java用两个例子充分阐述多态的可拓展性介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧