java继承----类的复用
复用类
类的复用主要有以下的三种方式:组合、继承、代理
一、组合:
将现有类型作为新类型底层实现的一部分来复用。在新类中声明要复用的对象的引用。组合技术通常用于在新类中使用现有类的功能而非它的接口。”has-a”的关系
二、继承:
组合和继承都是在新的类中放置子对象,组合是显式的这样做,继承则是隐式的这样做。继承是使用现有类,为了某种特殊需要将其特殊化。“is-a”的关系.
三、代理:
继承和组合的中庸之道。将一个成员对象置于要构造的类中(就像组合),与此同时在新类中暴露了该类成员所有的方法(就像继承)。举例如下:
太空飞船控制模块
public class SpaceShipControls {void up(int velocity) {}void down(int velocity) {}void left(int velocity) {}void right(int velocity) {}void forward(int velocity) {}void back(int velocity) {}void turboBoost() {}}
如果使用继承,假如SpaceShip继承控制模块(如下),但是SpaceShip并不是真正的SpaceShipControls的类型,显得不伦不类。即便它可以forward.
public class SpaceShip extends SpaceShipControls {private String name;public SpaceShip(String name) {this.name = name;}public String toString() {return name;}public static void main(String[] args) {SpaceShip protector = new SpaceShip("NSEA Protector");protector.forward(100);}}
太空船代理
public class SpaceShipDelegation {private String name;private SpaceShipControls controls = new SpaceShipControls();public SpaceShipDelegation(String name) {this.name = name;}// Delegated methods:public void back(int velocity) {controls.back(velocity);}public void down(int velocity) {controls.down(velocity);}public void forward(int velocity) {controls.forward(velocity);}public void left(int velocity) {controls.left(velocity);}public void right(int velocity) {controls.right(velocity);}public void turboBoost() {controls.turboBoost();}public void up(int velocity) {controls.up(velocity);}public static void main(String[] args) {SpaceShipDelegation protector = new SpaceShipDelegation("NSEA Protector");protector.forward(100);}}
四、结合使用组合和代理
class Plate {Plate(int i) {System.out.println("Plateconstructor");}}class DinnerPlate extends Plate {DinnerPlate(int i) {super(i);System.out.println("DinnerPlateconstructor");}}// 器具class Utensil {Utensil(int i) {System.out.println("Utensilconstructor");}}// 汤匙class Spoon extends Utensil {Spoon(int i) {super(i);System.out.println("Spoonconstructor");}}class Fork extends Utensil {Fork(int i) {super(i);System.out.println("Forkconstructor");}}class Knife extends Utensil {Knife(int i) {super(i);System.out.println("Knifeconstructor");}}// A cultural way of doingsomething:class Custom {Custom(int i) {System.out.println("Customconstructor");}}publicclass PlaceSetting extends Custom {private Spoon sp;private Fork frk;private Knife kn;private DinnerPlate pl;public PlaceSetting(int i) {super(i + 1);sp = new Spoon(i + 2);frk = new Fork(i + 3);kn = new Knife(i + 4);pl = new DinnerPlate(i + 5);System.out.println("PlaceSettingconstructor");}public static void main(String[] args) {PlaceSetting x = new PlaceSetting(9);}} /** Output: Customconstructor Utensil constructor Spoon constructor Utensil* constructor Forkconstructor Utensil constructor Knife constructor Plate* constructor DinnerPlateconstructor PlaceSetting constructor*/
五、在组合和继承之间选择
“is-a”的关系用继承,“has-a”的关系用组合。
class Vehicle {}class Engine {public void start() {}public void rev() {}public void stop() {}}class Wheel {public void inflate(int psi) {}}class Window {public void rollup() {}public void rolldown() {}}class Door{public Window window = new Window();public void open() {}public void close() {}}public class Car extends Vehicle {public Engine engine = new Engine();public Wheel[] wheel = new Wheel[4];public Doorleft = new Door(), right = new Door(); // 2-doorpublic Car() {for (int i = 0; i < 4; i++)wheel[i] = new Wheel();}public static void main(String[] args) {Car car = new Car();car.left.window.rollup();car.wheel[0].inflate(72);}}
java继承----类的复用相关推荐
- java 继承类 变量、静态变量、构造函数执行顺序
java 继承类 变量.静态变量.构造函数执行顺序 Java代码 class C{ static int prt(int i){ System.out.println(i); return i; ...
- java 继承类_java类的继承
继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(重写)的方式,产生一个新的类型.继承是面向对 象的三个基本特征--封装.继承.多态的其中之一,我们在使用java时编写的每一个类都是 ...
- JAVA继承类phone_JAVA(9)继承与多态
继承与多态 .抽象类.接口 继承: 继承是类与类的一种关系 java中的继承是单继承 继承的好处: 子类拥有父类的所有属性和方法.(修饰符不能是private) 实现代码的复用 语法规则: class ...
- java继承类大全_Java 面向对象继承部分(示例代码)
被继承的类称为父类(超类),继承父类的类称为子类(派生类) 通过继承可以实现代码重用 子类拥有父类非 private 的属性.方法. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展. 子类可以 ...
- JAVA继承类phone_【Java基础】类-----继承
一.基本知识 1.在Java语言中,实现类的继承使用extends关键字 格式如下: [public] class SubClass extends SuperClass{ //类体的定义 } 2.被 ...
- java继承类长方形面积_java_java用接口、多态、继承、类计算三角形和矩形周长及面积的方法,本文实例讲述了java用接口、多 - phpStudy...
java用接口.多态.继承.类计算三角形和矩形周长及面积的方法 本文实例讲述了java用接口.多态.继承.类计算三角形和矩形周长及面积的方法.分享给大家供大家参考.具体如下: 定义接口规范: /** ...
- JAVA基础-java继承类实现
定义人类Person.学生类Student.教师类Teacher.测试类Main 说明: 实现类的继承使用extends关键字,充分体现代码的可重用性 代码: Person类 public class ...
- Java学习记录-3.类的复用
对类的复用主要有两种方式,组合与继承. 组合 在一个类中使用一个类. 对于这些对象的初始化有四种方式: 1.在定义域处,这样在构造器被调用之前就会被初始化. 2.在构造器内. 3.惰性初始化,既在使用 ...
- Java:继承之super关键字,继承之私有权限,继承之方法重写,继承之object类,继承之简单工厂模式
一.继承的概念及用法 继承背后的思想就是 基于已存在的类来构建新类 当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求 ...
最新文章
- Linux内核之内核同步(一)——内核同步基础
- 【采用】信贷业务风控逾期指标及风控模型评估指标
- 《鸿蒙理论知识04》HarmonyOS概述之系统定义
- 深入理解css优先级
- Docker是传统的应用发布管理的终结者么?
- java 基础第一季
- 合肥python招聘_2020年合肥京东方招聘官网招聘-合肥京东方招聘官网招聘求职信息-拉勾招聘...
- java通过JDBC驱动连接操作hive实例
- mysql left join右边有多条_left join 右表多条数据重复
- 时间序列数据如何插补缺失值?
- 英语-- such that
- Amine-PEG-Pyrene,芘丁酸聚乙二醇氨基,Pyrene-PEG-NH2
- android源生获取经纬度,Android获取GPS经纬度
- 如何设置苹果Mac菜单栏的时间与日期显示
- 机器自动翻译古文拼音 - 十大宋词 - 水调歌头 明月几时有 苏轼
- 三星mzvlb1t0hblr是什么固态_固态硬盘跑分速度天梯图/天梯表,最全搜集。
- 神经网络输入图片大小,神经网络 图像相似度
- 【初入前端】第三课 课前预习
- 假设银行一年整存零取的月息为1.875%(年息为12*1.875%,年息按复利计算),现在某人手头有一笔钱,他打算在今后5年中,每年年底取出1000元作为孩子来年的教育金,到第5年孩子毕业时刚好取完这
- ssm企业任务流程管理毕业设计-附源码221533