java代码复用(继承,组合以及代理)
作为一门面向对象开发的语言,代码复用是java引人注意的功能之一。java代码的复用有继承,组合以及代理三种具体的表现形式,下面一一道来。
第一种方式是通过按照现有的类的类型创建新类的方式实现代码的复用,这种方式称之为继承。当我们创建一个新类时,总是继承这样或者那样的父类,隐式的父类是Object类。
public class A {
int a;
public A(int a) {
this.a=a;
System.out.println("------construct a------");
}
public void display(){
System.out.println(a);
}
}
public class B extends A {
int b;
public B(int b) {
super(b);
System.out.println("------construct b------");
}
}
public class C extends B {
int c;
public C(int c) {
super(c);
System.out.println("------construct c------");
}
public static void main(String[] args) {
new C(9).display();
}
}
第二种方式是组合,通过在新类中创建已存在的类的对象的方式来实现,这种方式很常见,代码如下
public class A {
int a;
public A(int a) {
this.a=a;
System.out.println("------construct a------");
}
public int getA(){
return a;
}
}
public class B{
private int b;
private A a=new A(2);
public B(int b) {
this.b=b;
System.out.println("------constructor b------");
}
public void show(){
b=b+a.getA();
System.out.println("------total:"+b);
}
public static void main(String[] args) {
new B(2).show();
}
}
第三种方式是代理,通过将类里面详细的实现方式封装起来,只提供类的方法的子集部分,代码如下
public class A {
public A() {
System.out.println("------construct a------");
}
public void method01(){
System.out.println("------method01------");
}
public void method02(){
System.out.println("------method02------");
}
public void method03(){
System.out.println("------method03------");
}
}
public class B{
private A a=new A();
public B() {
System.out.println("------constructor b------");
}
public void method01(){
a.method01();
}
}
总结:继承是通过关键字extends来实现的,在继承过程中,通过继承,子类可以获得父类的所有属性和方法;组合是将另一个对象的引用引入新类,在新类中可以直接使用引入类的共有方法;代理和组合很相似,但是他们表达的意思不一样,组合引入新类的主要是方便使用引入类的某些方法和属性,而代理主要是想隐藏部分引入类的方法或者是属性,通过代理类来达到这样的目的。
java代码复用(继承,组合以及代理)的更多相关文章
- C++进阶--代码复用 继承vs组合
//############################################################################ /* * 代码复用: 继承 vs 组合 * ...
- Java——代码复用(组合和继承)
前言 "复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它必须还能够做更多的事情." Java解决问题都围绕类展开的, ...
- Java代码复用的三种常用方式:继承、组合和代理
复用代码是Java众多引人注目的功能之一.这句话很通顺,没什么问题,但问题在于很多人并不清楚“复用”是什么.就好像我说“沉默王二是一个不止会写代码的程序员”,唉,沉默王二是谁? 我们需要来给“复用”下 ...
- javascript代码复用--继承
由于javascript没有类的概念,因此无法通过接口继承,只能通过实现继承.实现继承是继承实际的方法,javascript中主要是依靠原型链要实现. 原型链继承 原型链继承是基本的继承模式,其本质是 ...
- java代码。继承。。。很戳我的心啊。。不太懂。super的真正用法
总结: package com.addd; //构造方法不能被继承,只能是调用 //属性不能被继承,方法可以 //关于继承练习啊 class fjdsk { String name; int age; ...
- Java 代码复用 —— 泛型
public interface Comparable<T> { public int compareTo(T o); } 1. 接口(Comparable:可比较接口) public s ...
- Rust 中的继承与代码复用
在学习Rust过程中突然想到怎么实现继承,特别是用于代码复用的继承,于是在网上查了查,发现不是那么简单的. C++的继承 首先看看c++中是如何做的. 例如要做一个场景结点的Node类和一个Sprit ...
- 又一次认识java(四) — 组合、聚合与继承的爱恨情仇
有人学了继承,认为他是面向对象特点之中的一个,就在全部能用到继承的地方使用继承,而不考虑到底该不该使用,无疑.这是错误的.那么.到底该怎样使用继承呢? java中类与类之间的关系 大部分的刚開始学习的 ...
- 关于Java中的继承和组合的一个错误使用的例子
[TOC] 关于Java中的继承和组合的一个错误使用的例子 相信绝大多数人都比较熟悉Java中的「继承」和「组合」这两个东西,本篇文章就主要就这两个话题谈论一下.如果我某些地方写的不对,或者比较幼稚, ...
随机推荐
- libview关于图片导入并显示
1 程序框图->图形与声音->图形格式,选择“写入某个格式的图片”,然后在路径处创建输入控件,然后在“图片函数”中选择“绘制平面像素图”,在控件输出端“新图片”创建显示控件.打开前面板,在 ...
- 七脚OLED屏幕使用IIC接口
7pin 0.96寸OLED模块支持SPI和IIC接口 默认是SPI接口;如果想用IC接口;操作如下几步骤: 1.将模块背面的电阻R3换到R1位置,此时将模块切换为IIC接口:电阻R8可以用0欧姆电阻 ...
- python 判断文件和文件夹是否存在、创建文件夹
原文链接:https://www.cnblogs.com/hushaojun/p/4533241.html >>> import os >>> os.path.ex ...
- Windows下搭载虚拟机以及环境安装
前言 最近回到家中进行赛前自主提升 模拟赛考虑到考试环境是NOI Linux 而大多数同学电脑环境为Windows 有同学想要模拟真实考试环境 但是NOI Linux的系统过于"阉割版&qu ...
- Django万能权限框架组件
业务场景分析 假设我们在开发一个培训机构的 客户关系管理系统,系统分客户管理.学员管理.教学管理3个大模块,每个模块大体功能如下 客户管理 销售人员可以录入客户信息,对客户进行跟踪,为客户办理报名手续 ...
- 简明python教程--读后感--推荐给python新手
原书名: A Byte of Python作者: Swaroop, C. H.译者: 沈洁元出版社: 未知 优点 1. 讲解很详细,很基础,适合入门,对编译器也做了简单的介绍 2. ...
- [转] Linux操作系统启动流程
总启动流程 这部分转自:https://www.cnblogs.com/liang-io/p/9651656.html 一般来说,所有的操作系统的启动流程基本就是: 总的来说,linux系统启动流程可 ...
- SpringCloud系列之Nacos应用篇
前言 原先项目是以SpringConfig作为项目配置中心组件,Eureka作为服务注册发现组件,基本上就是SpringCloud全家桶,Eureka已经停更,所以前期调研可替换方案,主流替换方案有C ...
- python爬虫--看看虎牙女主播中谁颜值最高
目录 爬虫 百度人脸识别接口 效果演示 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知 ...
- 数字电路基础(三)TTL与非门输入端接电压表的示数
如下图所示,当ui输入低电平,电压表示数为0.3v,当ui输入高电平时,电压表示数为1.4v,分析如下 当ui=0.3 此时VT1导通,电流都从输入端流出,VT1的基极电位被钳位在1.0v(Ub1=0 ...