多态可以分为变量的多态,方法的多态,类的多态.我这里强调的是类的多态,这是我们在以后的工作中经常回用到的
首先,有这样一个系统:有个学生工作从达内毕业了,作的还不错.买了辆捷达汽车.这个系统应该如何设计呢?
按照OO的思想,我们会抽象出来一个类,表示捷达汽车,其中有个run()方法
public class JD{
public void run(){
System.out.println("JD在以120迈的速度在run");
}
}
我们还会抽象出一个类,来代表人.其中有个drive()方法,需要一个汽车类型作为参数,我们先传入一个JD类型的参数
// 这是我们的核心业务类
public class Person{
public void drive(JD jd){
jd.run();
}
public static void main(String args[]){
Person p =new Person();
JD jd = new JD();
p.drive(jd);
}
}
如果你写出这样的代码的话,恭喜你!你中大奖了!---------------------你会被项目精力砍死的!!!!!!!
项目经理为什么会砍你呢?
因为你写的代码偶合性太强了!
如果我们的需求变了,这个学生后来更有钱了,买了一两Benz.那么我们以前的系统怎么办啊.不要指望你作的系统永远不会变化
我们的系统只能修改!这就是项目经理砍你的原因
我们的系统会增加一个Benz类,也有个run()方法
public class Benz{
public void run(){
System.out.println("Benz在以200迈的速度在run");
}
}
我们的核心业务类也要修改
public class Person{
/*
public void drive(JD jd){
jd.run();
}
*/
public void drive(Benz b){
b.run();
}
public static void main(String args[]){
Person p =new Person();
Benz b = new Benz();
p.drive(b);
}
}
以后的情况,我们可以把车抽象出来:
public abstract class Driver{
/*属性*/
public void run();//让子类来运行
}
public Benz extends Driver{
public void run(){
System.out.println("Benz在以200迈的速度在run");
}
}
public JD extends Driver{
public void run(){
System.out.println("JD is running...");
}
}
public class Person{
private Driver driver;
public Person(){
}
public Person(Driver driver){
this.driver = driver;
}
public void drive(){
driver.run();
}
public void setDriver(Driver driver){//运用参数多态,以后不管买什么车都可以
this.driver = driver;
}
public static void main(String args[]){
Person p =new Person();
JD jd = new JD();//刚开始没钱就买辆JD吧
p.setDriver(jd);
p.driver();
Benz benz = new Benz{();//有钱换车了
p.setDriver(benz);
p.driver();
}
}
什么是多态?
简单的说:就是用基类的引用指向之类的对象
提问:多态可以用在什么地方呢?
回答:可以用在方法的参数中和方法的返回类型中
其中方法的参数楼上的兄弟已经给出了代码.我这里给出在方法的返回类型中如何使用多态
上面的例子中,不管是JD还是Benz都是我们自己直接new出来的.我们可以设计一个工厂类,专门生成汽车
/**
* 我们将多态使用在方法的返回类型中
* Car可以是抽象类,也可以是接口,JD和Benz分别继承该类或实现该借口
*/
public class CarFactory{
public Car factory(String carName){
if(carName.equals("JD")){
return new JD();
}else if(carName.equals("Benz")){
return new Benz();
}else{
System.out.println("对比起,不伺候");
return null;
}
}
}
这实际上就是设计模式中的简单工厂模式!
另外,我我们在JDK中可以大量的看到多态的应用,比如在Object类中的equals(Object obj)方法中,参数是个Object
类型的参数.因为Object是Java中所有类的基类.,但是才传入参数的时候,可以传入任何一个类的对象
这就是多态的应用!
使用多态可以解决项目中紧偶合的问题,提高程序的课扩展性.是OCP原则的一个具体的实现
分享到:
相关推荐
java的编译时多态和运行时多态,保证一看就会
Java中什么是多态?如何实现多态? Java中什么是接口?它有什么作用? Java中什么是抽象类?它有什么作用? Java中什么是final关键字?它有什么作用? Java中什么是static关键字?它有什么作用? Java中什么是包?它...
Java 多态中的类型转换
多态
- 什么是多态?如何在Java中实现多态? ## 3. 异常处理 - 什么是Java异常?有哪些常见的Java异常? - try-catch-finally块的作用是什么? - 什么是Java中的断言?如何使用? ## 4. 数据库和SQL - 什么是数据库?...
C#多态测试C#多态测试C#多态测试C#多态测试C#多态测试
什么是Java虚拟机(JVM)?它如何工作? 什么是垃圾回收?Java中的垃圾回收是如何实现的? Java中的锁机制有哪些?它们有什么区别? 什么是线程安全?在Java中如何实现线程安全? 什么是继承?Java中的继承有哪些...
第三章 继承与多态 掌握封装的含义及用法 什么是继承? 继承有什么作用? 怎么写继承? 1.继承的概念及其用法 2.方法的重写及重载与其的区别 3.多态及其应用 4.super关键字 5.final关键字
NULL 博文链接:https://zhangxing119.iteye.com/blog/1197255
通过两个程序代码例子彻底理解什么是多态,什么是虚函数;
java的多态,是一个很重要的环节.但是要知道什么是多态!
为什么要使用kafka? 14、什么叫NIO(同步非阻塞)? 15、kafka中为什么要有partition? 16、topic是什么? 17、spark的shuffle是什么概念? shuffle是随机分组的概念 18、zookeeper是做什么用的? 19、
c++ 多态求面积 什么是多态,怎样用多态求面积,非常好的东西
一个HW 多态题目 一个HW 多态题目一个HW 多态题目一个HW 多态题目一个HW 多态题目一个HW 多态题目
Java多态的实现机制,多态是java的三大属性之一,开发中很重要的一个环节
目录: 你管这破玩意叫CPU?你管这破玩意叫线程? 执行I/O操作时底层发生了什么? 从小白到高手,你需要理解同步与异步你管这破玩意叫IO多路复用?...为什么数据结构与算法如此重要彻底理解链表 知乎回答
该资料,是一个多态的例子,充分的掌握多态,让多态得到很好的应用
Java多态的讲解
文件操作多态文件操作多态文件操作多态文件操作多态文件操作多态文件操作多态文件操作多态文件操作多态文件操作多态
该实例我是一篇文章的源代码,解释了什么是封装继承和多态,地址https://blog.csdn.net/wangjianbo09/article/details/82222807