作为一门面向对象开发的语言,代码复用是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代码复用(继承,组合以及代理)的更多相关文章

  1. C++进阶--代码复用 继承vs组合

    //############################################################################ /* * 代码复用: 继承 vs 组合 * ...

  2. Java——代码复用(组合和继承)

    前言 "复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它必须还能够做更多的事情." Java解决问题都围绕类展开的, ...

  3. Java代码复用的三种常用方式:继承、组合和代理

    复用代码是Java众多引人注目的功能之一.这句话很通顺,没什么问题,但问题在于很多人并不清楚“复用”是什么.就好像我说“沉默王二是一个不止会写代码的程序员”,唉,沉默王二是谁? 我们需要来给“复用”下 ...

  4. javascript代码复用--继承

    由于javascript没有类的概念,因此无法通过接口继承,只能通过实现继承.实现继承是继承实际的方法,javascript中主要是依靠原型链要实现. 原型链继承 原型链继承是基本的继承模式,其本质是 ...

  5. java代码。继承。。。很戳我的心啊。。不太懂。super的真正用法

    总结: package com.addd; //构造方法不能被继承,只能是调用 //属性不能被继承,方法可以 //关于继承练习啊 class fjdsk { String name; int age; ...

  6. Java 代码复用 —— 泛型

    public interface Comparable<T> { public int compareTo(T o); } 1. 接口(Comparable:可比较接口) public s ...

  7. Rust 中的继承与代码复用

    在学习Rust过程中突然想到怎么实现继承,特别是用于代码复用的继承,于是在网上查了查,发现不是那么简单的. C++的继承 首先看看c++中是如何做的. 例如要做一个场景结点的Node类和一个Sprit ...

  8. 又一次认识java(四) — 组合、聚合与继承的爱恨情仇

    有人学了继承,认为他是面向对象特点之中的一个,就在全部能用到继承的地方使用继承,而不考虑到底该不该使用,无疑.这是错误的.那么.到底该怎样使用继承呢? java中类与类之间的关系 大部分的刚開始学习的 ...

  9. 关于Java中的继承和组合的一个错误使用的例子

    [TOC] 关于Java中的继承和组合的一个错误使用的例子 相信绝大多数人都比较熟悉Java中的「继承」和「组合」这两个东西,本篇文章就主要就这两个话题谈论一下.如果我某些地方写的不对,或者比较幼稚, ...

随机推荐

  1. SpringCloud简记_part2

    Zookeeper服务注册与发现 1)Eureka停止更新了,你怎么办? https://github.com/Netflix/eureka/wiki 2)SpringCloud整合Zookeeper ...

  2. 关于Redis的工作模式

    1.哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master. 缺点 ...

  3. 第3章 Hive数据类型

    第3章 Hive数据类型 3.1 基本数据类型 对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB ...

  4. 什么情况下适合用UDP协议,什么情况下适合用TCP协议?

    总的来说 TCP协议提供可靠的服务, UDP协议提供高效率的服务. 高可靠性的TCP服务提供面向连接的服务,主要用于一次传输大量报文的情形, 如文件传输,远程登录等: 高效率的UDP协议提供无连接的数 ...

  5. 线程池之Executor框架

    线程池之Executor框架 Java的线程既是工作单元,也是执行机制.从JDK5开始,把工作机单元和执行机制分离开来.工作单元包括Runnable和Callable,而执行机制由Executor框架 ...

  6. 操作系统-I/O(6)I/O与系统调用

    所有高级语言的运行时(runtime)都提供了执行I/O功能的机制. 例如,C语言中提供了包含像printf()和scanf()等这样的标准I/O库函数, C++语言中提供了如 <<和&g ...

  7. Elementor如何隐藏页面上的标题(2种办法)

    原文首发于:https://loyseo.com/how-to-hide-page-title-in-elementor/ 本文介绍两种隐藏Elementor页面默认标题的方法,一种是单个隐藏,一种是 ...

  8. [NOIP2018]保卫王国 题解

    NOIP2018提高组D2T3 ddp虽然好想,但是码量有点大(其实是我不会),因此本文用倍增优化树形DP来解决本题. 题意分析 给一棵树染色,每个节点染色需要一定的花费,要求相邻两个节点至少要有一个 ...

  9. seo排名顾问不仅仅是关键词排名

    http://www.wocaoseo.com/thread-246-1-1.html SEO顾问是什么,应该做什么工作呢,是不是主要做关键词的优化推广呢?做seo顾问入门的人,或者想聘请seo顾问的 ...

  10. 领导给了一堆无序杂乱的数据,我写了个Python自动化脚本

    这个问题算是群友答疑.如果说同事或者老板给你一堆这样的数据,你估计会抓狂,该怎么处理呢? 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. ...