java 多态的深入理解
简单来说 :
多态 能够很好的解决代码耦合性的问题
考虑这样一个场景
有个人 买了辆捷达汽车 .这个系统应该如何设计呢?
public class JettaCar {
public void run() {
System.out.println("JettaCar run");
}
}
public class Person {
private JettaCar jettaCar;
public Person(JettaCar jettaCar) {
super();
this.jettaCar = jettaCar;
}
public void drive() {
jettaCar.run();
}
public static void main(String[] args) {
Person p = new Person(new JettaCar());
p.drive();
}
看起来代码功能好像实现了? 那如果后来他买了宝马车,那又该在怎么做呢?
很简单嘛 在新建一个宝马类,在person中传入即可,
但是我们的核心代码也要修改,能不能不修改person类呢? --当然可以,抽象出汽车接口
定义一个汽车Car接口,定义run方法
在person 中 我们使用该接口
public interface Car {
void run();
}
public class BmwCar implements Car {
@Override
public void run() {
System.out.println("BmwCar run");
}
}
Person 里面是一个接口
public class Person {
//private JettaCar jettaCar;
private Car car;
public Person(Car car) {
super();
this.car = car;
}
public void drive() {
car.run();
}
public static void main(String[] args) {
//这里我们传入什么汽车对象 就调用什么对象的run方法,拓展性增强
Person p = new Person(new JettaCar());
p.drive();
}
}
总结:系统未来可能需要拓展时,记得定义接口。以增强拓展性。
java 多态的深入理解的更多相关文章
- 对java多态的理解
java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过 Cat c = new C ...
- Java多态-如何理解父类引用指向子类对象
java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过 Cat c = new ...
- 关于java多态的理解
要理解多态,就必须有一个大的理解方向,不然很容易绕进去. 首先知道多态的释义:多态性是指一个名词可以有多种语义. 对于java的多态性学习者来说,就是必须要知道多个同名方法在不同情况下的使用规则. j ...
- Java经验杂谈(2.对Java多态的理解)
多态是面向对象的重要特性之一,我试着用最简单的方式解释Java多态: 要正确理解多态,我们需要明确如下概念:・定义类型和实际类型・重载和重写・编译和运行 其中实际类型为new关键字后面的类型. 重载发 ...
- 深入理解java多态没有烤山药的存在,java就不香了吗?
目录 1. 从吃烤山药重新认识多态 2. 多态前提条件[重点] 3. 多态的体现 4. 多态动态绑定与静态绑定 5. 多态特性的虚方法(virtual) 7. 向上转型 8. 向下转型 9. 向上向下 ...
- 深入理解Java多态机制
从字节码层面来看,Java中的所有方法调用,最终无外乎转换为如下几条调用指令. invokestatic: 调用静态方法. invokespecial: 调用实例构造器<init>方法,私 ...
- C++和java多态的区别
C++和java多态的区别 分类: Java2015-06-04 21:38 2人阅读 评论(0) 收藏 举报 转载自:http://www.cnblogs.com/plmnko/archive ...
- 从JVM角度看Java多态
首先,明确一下,Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 然后看一个例子 package test.xing; class Father{ prot ...
- Java 多态、内部类、异常、包
一.多态 1. 概述 理解:多态可以理解为事物存在的多种体(表)现形态. 例如: 动物中的猫和狗. 猫这个对象对应的是猫类型,例如:猫 x = new 猫(); 同时猫也是动物中的一种,也可以把猫称为 ...
随机推荐
- react+webpack+babel环境搭建
[react+webpack+babel环境搭建] 1.react官方文档推荐使用 babel-preset-react.babel-preset-es2015 两个perset. Babel官方文档 ...
- cdh 安装系列2--cdh manager product 安装
前期准备工作: 准备三台centos7 地址分别为 192.168.20.163:192.168.20.162:192.168.20.161 用163这台机器链接外网,并安装manager以及mana ...
- MONGO的简单语法,新手实用
window上启动方式:(简单略) mongod --dbpath E:\study_lib\mongodb\db --port=27000 show dababases; (创建配置文件的启动方式) ...
- 算法之LOWB三人组之插入排序
插入排序 思想:类似于抽扑克牌,共有8张扑克牌,手里默认有一张,桌面上有7张,我们每次从桌面上抽一张和手里的牌进行比较,如果比手里的牌大,则直接放到手里的牌的后面,如果比手里的牌小,则放到手里的牌的前 ...
- 二叉树中和为某一值的路径(python)
题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...
- 高级测试岗位面试题---MARK
直接手写一个python类 直接手写一个构造函数 紧接着上面的代码,直接手写,补充完整代码,要求对列表中的人进行排序,并筛选出分数大于80的人的名单,组成一个新的列表显示出来. class Perso ...
- Codeforces Beta Round #42 (Div. 2)
Codeforces Beta Round #42 (Div. 2) http://codeforces.com/contest/43 A #include<bits/stdc++.h> ...
- AIO编程
AIO编程,在NIO基础之上引入了异步通道的概念,并提供了异步文件和异步套接字通道的实现,从而在真正意义上实现了异步非阻塞,之前我们学习的NIO只是非阻塞而并非异步.而AIO它不需要通过多路复用器对注 ...
- 【nginx】配置详解
nginx作为web server,是最常用的网络服务器.来看下它的配置文件. 实验1:最基础的配置(可访问静态资源) 包括listen,server_name,root,index,access_l ...
- eclipse配置mybatis xml文件自动提示(转)
原文链接 原文如下: 如果使用eclipse中,再写mybatis的xml文件的时候,没有提示,用“Alt+/”,不能把代码用快捷键敲出来,可以试试下面要说的这种方法,反正我试了,我这个可以. 1.下 ...