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中的「继承」和「组合」这两个东西,本篇文章就主要就这两个话题谈论一下.如果我某些地方写的不对,或者比较幼稚, ...
随机推荐
- cdh6.2.1搭建安装
1.为CM安装mysql驱动 4台服务器 将mysql-connector-java-5.1.27-bin.jar拷贝到/usr/share/java路径下,并重命名 mv mysql-connect ...
- Robot Framework(8)——脚本语法示例记录
大神写了一个Robot Framework的脚本,好多语法之前没接触过,就有了这篇,记录下来一起学习,欢迎纠错 第二三四五列,一般是入参,红色的表示必填的入参.浅灰色表示选填的入参.深灰色表示无需填写 ...
- Protocol buffers--python 实践 简介以及安装与使用
简介: Protocol Buffers以下简称pb,是google开发的一个可以序列化 反序列化object的数据交换格式,类似于xml,但是比xml 更轻,更快,更简单.而且以上的重点突出一个跨平 ...
- MySQL进阶之MySQL索引以及索引优化
本文配合B站学习视频BV1es411u7we使用效果更佳. 1. MySQL版本 主流版本:5.x版 5.0 - 5.1:早期产品的延续,升级维护 5.4 - 5.x:MySQL整合了三方公司的新存储 ...
- 你竟然不知道Java中可以用 :: 吗?
简介 Java8中方法引用分为三种,方法引用通过一对双冒号:: 来表示,方法引用是一种函数式接口的另一种书写方式 静态方法引用,通过类名::静态方法名, 如 Integer::parseInt 实例方 ...
- Mac搭建appium环境
1.安装brew 查看是否已经装上brew,终端输入命令:brew --version,已经装上的就不用再装了: 如果没有安装,终端输入命令:ruby -e "$(curl -fsSL ht ...
- 【小白学PyTorch】1 搭建一个超简单的网络
文章目录: 目录 1 任务 2 实现思路 3 实现过程 3.1 引入必要库 3.2 创建训练集 3.3 搭建网络 3.4 设置优化器 3.5 训练网络 3.6 测试 1 任务 首先说下我们要搭建的网络 ...
- Vue.js 实战教程(附demo)
在实战之前,你需要对vuejs的基础语法有一定的了解,可以通过以下几个途径进行学习: vue.js官方文档:https://cn.vuejs.org/v2/guide/index.html vue.j ...
- windows设置定时执行脚本
如果你写了一些Python程序,想要在特定的时间进行执行,例如你想让一段爬虫程序在每天的上午10点执行一次,那么我们就可以来使用windows自带的定时任务进行设置.由于Windows系统,无法使用L ...
- day45:JS中的json&JS的BOM操作和DOM操作
目录 1.补充:CSS中的弹性盒子 2.JS中json的序列化 3.JS中的BOM操作 3.1 location操作 3.2 计时器 4.JS中的DOM操作 4.1 创建标签 4.2 查找标签 4.3 ...