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中的「继承」和「组合」这两个东西,本篇文章就主要就这两个话题谈论一下.如果我某些地方写的不对,或者比较幼稚, ...
随机推荐
- C++ Templates (1.1 初窥函数模板 A First Look at Function Templates)
返回完整目录 目录 1.1 初窥函数模板 A First Look at Function Templates 1.1.1 定义模板 Defining the Template 1.1.2 使用模板 ...
- Python脚本实现在cmd执行相关命令
通过Python脚本实现,在cmd命令执行文件的cp(复制).rm(删除).rename(重命名).move(文件移动).mkdir(创建目录) cmd执行命令格式:python xxx.py 用户名 ...
- txt工具大全(TXT文件合并、txt批量替换、编码转换器)
http://www.wocaoseo.com/thread-301-1-1.html txt是我们在seo中常用的处理对象,但是在这个处理过程中可能有些细节需要注意,比如有些有编码问题,我们就需要编 ...
- APP重构之路:引入单元测试
一.为什么要引入单元测试 在开发过程中我们会遇到这样一些问题: 面对需要重构庞大的模块代码时无从下手 修改了一处地方却在另一处地方引发了新的bug 扩展新功能的同时导致旧代码出现bug 在测试人员难以 ...
- 是时候扔掉 Postman 了,Apifox 不香吗!
偶然间发现这款测试工具Apifox,暂时还没有想好该把它叫接口测试工具还是辅助开发工具.但是,给我感觉,就是很好用,而且后面还有很多开发的功能是我很期待的. 根据官方给出的简单描述,它能做的事就是: ...
- iOS NSOperation
iOS NSOperation 一.简介 除了,NSThread和GCD实现多线程,配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOp ...
- Apollo(阿波罗)配置中心Java客户端使用指南使用指南
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管 ...
- AOP理论
目录 AOP理论 什么是AOP 那Spring AOP,AspectJ又是啥呢? 为什么说AOP是OOP的补充和完善呢? 应用场景举例 AOP的优点 AOP的术语整理 AOP理论 什么是AOP AOP ...
- 09. jenkins配置不同用户显示不同视图
jenkins配置不同用户显示不同视图 一.新建用户 1.1 新建用户 Manage Jenkins -> Manage Users -> 新建用户 1.2 我创建了三个用户,分别 ...
- Oracle的timestamp字段更新实验 结论:只有逐条更新才能保证timestamp字段有差别,批量更新只会得到一致的时间,此操作无关时间精度.
有这么一张表: create table hy_testtime( id number(6,0) not null primary key, name nvarchar2(20) not null, ...