第7章 复用类(java编程思想)

【上海大学计算机组成原理实验报告】六、内存系统实验 学习内存访问机制//理解代码和数据的分区存放原理和技术//手动方式把立即数`33H`写入内存`D1H`单元//手动方式把`D1H`单元的内容读出,再送入`ST`单元//在`CP226`汇编语言程序集成开发环境下编写程序//既然有`ORG`微指令,为什么集成开发环境下载到实验箱的目标程序的第一条执行语句最好存放在0号地址?//上海大学计算机组成原理实验//内存系统实验 阅读详情

7.2 继承语法

//: reusing/Detergent.java
// Inheritance syntax & properties.
import static net.mindview.util.Print.*;

class Cleanser {
  private String s = "Cleanser";
  public void append(String a) { s += a; }
  public void dilute() { append(" dilute()"); }
  public void apply() { append(" apply()"); }
  public void scrub() { append(" scrub()"); }
  public String toString() { return s; }
  public static void main(String[] args) {
    Cleanser x = new Cleanser();
    x.dilute(); x.apply(); x.scrub();
    print(x);
  }
}	

public class Detergent extends Cleanser {
  // Change a method:
  public void scrub() {
    append(" Detergent.scrub()");
    super.scrub(); // Call base-class version
  }
  // Add methods to the interface:
  public void foam() { append(" foam()"); }
  // Test the new class:
  public static void main(String[] args) {
    Detergent x = new Detergent();
    x.dilute();
    x.apply();
    x.scrub();
    x.foam();
    print(x);
    print("Testing base class:");
    Cleanser.main(args);
  }	
} /* Output:
Cleanser dilute() apply() Detergent.scrub() scrub() foam()
Testing base class:
Cleanser dilute() apply() scrub()
*///:~

cleaner和Detergent均含有main方法(),可以为每一个类都创建一个main()方法的技术可以使每个类的单元测试变得简单,单元测试后,也无需删除main(),可以将其留待下次测试。
即使一个程序中含有多个类,也只有命令行所调用的那个类的main()方法被调用,在此例中,可以看到Detergent.main()明确调用Cleaner.main().并将命令行获取的参数传递给了他,当然也可以向其传递任意的String数组。
7.2.1 初始化基类
当创建了一个导出类的对象时,该对象包含了一个基类的对象,这个基类对象和用基类直接创造对象是一样的,区别在于后者来自于外部,而导出类的对象被包装在导出类的内部。

//: reusing/Cartoon.java
// Constructor calls during inheritance.
import static net.mindview.util.Print.*;

class Art {
  Art() { print("Art constructor"); }
}

class Drawing extends Art {
  Drawing() { print("Drawing constructor"); }
}

public class Cartoon extends Drawing {
  public Cartoon() { print("Cartoon constructor"); }
  public static void main(String[] args) {
    Cartoon x = new Cartoon();
  }
} /* Output:
Art constructor
Drawing constructor
Cartoon constructor
*///:~

如果没有默认的基类构造器,或者想要调用一个基类的构造器,就必须用关键字super显式的调用基类的构造器的语句,并且配以对应的参数,否则会报错。

//: reusing/Chess.java
// Inheritance, constructors and arguments.
import static net.mindview.util.Print.*;

class Game {
  Game(int i) {
    print("Game constructor");
  }
}

class BoardGame extends Game {
  BoardGame(int i) {
	  super(i);
    print("BoardGame constructor");
  }
}	

public class Chess extends BoardGame {
  Chess() {
    super(11);
    print("Chess constructor");
  }
  public static void main(String[] args) {
    Chess x = new Chess();
  }
} /* Output:
Game constructor
BoardGame constructor
Chess constructor
*///:~

7.4.2 名称屏蔽
如果java的基类拥有某个已被多次重载的方法名称,那么在导出类中重新定义该方法,不会导致基类的该方法被屏蔽

//: reusing/Hide.java
// Overloading a base-class method name in a derived
// class does not hide the base-class versions.
import static net.mindview.util.Print.*;

class Homer {
  char doh(char c) {
    print("doh(char)");
    return 'd';
  }
  float doh(float f) {
    print("doh(float)");
    return 1.0f;
  }
}

class Milhouse {}

class Bart extends Homer {
  void doh(Milhouse m) {
    print("doh(Milhouse)");
  }
}

public class Hide {
  public static void main(String[] args) {
    Bart b = new Bart();
    b.doh(1);
    b.doh('x');
    b.doh(1.0f);
    b.doh(new Milhouse());
  }
} /* Output:
doh(float)
doh(char)
doh(float)
doh(Milhouse)
*///:~

7.7.2 再论组合与继承
到底该用组合还是继承,一个最清晰的判断方法就是问一问自己是否需要从新类向基类向上转型。如果必须向上转型,则继承是必要的,如果不需要,则要自选考虑自己是否需要继承。

7.8 final关键字

定义为static强调只有一封, 定义为final强调为常量。
一个既是static又是final的域只占据一段不能改变的存储区域。
对于基本类型来使用final使数值恒定不变,而对对象引用,final使其引用恒定不变,一旦引用被指向一个对象,就不能把它再指向另一个对象,对象本身是可以被改变。
空白final
必须在域的定义处或者在每个构造器用表达式fianl进行赋值,这正是final域在使用前总是被赋值的原因。
final参数
java允许在参数列表中以声明的方式将参数指明为final,这意味着你无法在方法中更改参数引用所指向的对象

//: reusing/FinalArguments.java
// Using "final" with method arguments.

class Gizmo {
  public void spin() {}
}

public class FinalArguments {
  void with(final Gizmo g) {
    //! g = new Gizmo(); // Illegal -- g is final
  }
  void without(Gizmo g) {
    g = new Gizmo(); // OK -- g not final
    g.spin();
  }
  // void f(final int i) { i++; } // Can't change
  // You can only read from a final primitive:
  int g(final int i) { return i + 1; }
  public static void main(String[] args) {
    FinalArguments bf = new FinalArguments();
    bf.without(null);
    bf.with(null);
  }
} ///:~

final方法
将方法锁定,以防止任何继承类修改他的含义。类中所有的private方法都隐式的被指定为final的,由于无法取用private方法,所以也就无法覆盖他,可以对private方法添加final,但这没有添加任何含义。
private与final
如果某方法为private,如果在子类中生成一个相同名称的public或protected方法,此时就不是覆盖方法,而是生成了一个新的方法
7.8.3 final类
当你将某个类定义为fina了时,就表明了你不打算继承该类,而且也不允许别人这么做。

066、AR 应用中虚拟物体漂移抖动?IMU 融合 + 光流追踪的视觉里程计优化方案 AR应用中虚拟物体漂移抖动优化方案 摘要:针对AR应用中虚拟物体漂移抖动问题,提出一种IMU融合与光流追踪的视觉里程计优化方案。关键点包括:1) 采用IMU预积分技术处理高频噪声,通过中值积分计算帧间相对运动约束;2) 使用金字塔LK光流追踪像素运动,通过中值偏差法剔除异常值;3) 构建10帧滑动窗口的紧耦合优化框架,将IMU预积分约束和光流重投影约束联合优化。实验表明,该方法有效解决了时间戳未对齐导致的"跳舞箭头"现象,在手机端实现稳定30fps的AR定位精度,漂移误差降低至厘米级。特别提醒:IMU与视觉 阅读详情

相关推荐

资产监测设备中130dBm的GPS信号注入天线端口,C/N0一般是多少?

笔者的团队一直从事于资产监测设备的开发,在开发过程中,涉及到很多细节的问题,针对新入职的同事来说较为陌生。同时,在团队外,还有需要对智能硬件终端开发感兴趣的用户。基于此背景下,笔者将在下面的内容主要介绍资产监测设备以及对设备中的GPS相关的问题:130dBm的GPS信号注入天线端口,C/N0一般是多少?作出详细的解答。 资产监测设备概述: 资产监测设备是基于物联网通信技术基础上的智能硬件终端,其主要作用是帮助用户监测资产在仓库、运输途中、交付整个流通环节中,提供资产的实时位置与状态参数。用户只需要登录资产

瑞奇聊通信模组 1229

Java编程思想 第7章 复用类

Java编程思想 第7章 复用类

当初游的快了一点 771

PostgreSQL14 离线安装全攻略:从下载到配置详解

本文详细介绍了PostgreSQL14在无网络环境下的离线安装全流程,涵盖RPM包与源码编译两种主流方法。文章重点解析了安装前的系统环境检查、依赖包准备、数据库初始化、远程访问配置以及安装后的关键检查与性能调优,旨在帮助运维和开发人员在离线服务器上高效、稳定地部署PostgreSQL14数据库。

p5l2m9n4o6q的博客 710

《JAVA编程思想》学习笔记:第7章(复用类)

目录Java编程思想(一)第1~4章:概述Java编程思想(二)第5章:初始化和清理Java编程思想(三)第6章:访问权限Java编程思想(四)第7章:复用类Java编程思想(五)第8章:多态Java编程思想(六)第9章:接口Java编程思想(七)第10章:内部类Java编程思想(八)第11章:持有对象Java编程思想(九)第12章:异常Java编程思想(十)第13章:字符串Java编程思想(十一...

caobaokang的专栏 1355

技术前沿:半导体前道检测和量测设备修复技术

半导体前道检测设备是目前除光刻机外,国产渗透率较低的环节之一,近年来我国初步实现国产突破。前道检测相对后道检测环节壁垒更高,国内多家涉及后道测试,涉及前道检测和中道检测相对较少。

VOMMA的博客 4543

1.用Python写了一个进销存管理的软件~需求分析&界面设计&数据库设计&技术路线选择~

前端也打算用Python来写,查了很多的python库,大家比较推荐的是wxpython和QPython,之前接触过一点点的QT,确实非常强大,但是库比较重量级,自己写的这个东西明显配不上QT,又详细调研了一下wxpython,就是它了!

pepper_lihui的专栏 4321

《Java编程思想》读书笔记之第7章-复用类

第7章 复用类 什么是复用类:不必重复写以前写过的类功能,使代码可以重复利用,而不是每次从头开始写。 复用方法: 组合:在新的类中产生现有类的对象,由于新的类是由现有类的对象所组成,所以称之为组合。该方法复用了现有程序代码的功能,而非它的形式。 继承:按照现有类的类型来创建新类。无需改变现有类的形式,采用现有类的形式并在其中添加新代码。 7.1 组合语法 组合,即是在新类中实例化对象即可。 例如(本例目的在于演示组合语法的基本使用): package 第7章_复用类.第1节_组合语法; p

二木成林 305

从零开始构建AURIX TC397开发环境:硬件选型与IDE配置全攻略

本文详细介绍了如何从零开始构建AURIX TC397开发环境,涵盖硬件选型、IDE配置及外设驱动开发等关键步骤。针对TriCore架构的高性能特性,提供了开发板选型建议、AURIX Development Studio(ADS)安装配置指南,以及GPIO和CAN FD驱动的实战代码示例,帮助开发者快速上手TC397系列微控制器的开发工作。

7up55的博客 203

【笔记】《java编程思想(第四版)》第7章-复用类

第7章 复用类 复用代码是Java众多引人注目的功能之一。但想要成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它还必须能够做更多的事情。 组合:只在新的类中产生现有类的对象。 继承:按照现有类的类型来创建新类。 7.1 组合语法 toString()很特殊。每一个非基本类型的对象都有一个toString()方法,而且当编译器需要一个String而你却只有一个对象时,该方法便会被调用...

ZeromaXHe的博客 1059

Python爬虫实战:如何抓取POI信息(公共场所)位置信息

获取公共场所的信息:如餐厅、商店、医院、景点等。抓取POI的基本信息:如名称、类别、地址、评分等。获取POI的地理坐标:经度和纬度信息。存储POI数据:将抓取到的POI信息存储到本地数据库中。通过本篇文章,我们详细介绍了如何使用Python爬虫抓取POI信息。通过Google Maps API和OpenStreetMap(Overpass API),我们展示了如何获取餐厅、商店、医院等公共场所的位置信息,并进一步探讨了如何处理分页、存储数据以及反爬虫策略。

2201_76125261的博客 378

诊断CAPL自动化(5) ——没有CANdela,无法编辑cdd数据库文件,也能轻松完成诊断测试

🍅我们知道cdd数据库文件,是CANoe测试环境的重要组件,它可以让我们更加轻松的完成诊断测试工作;但是创建和编辑cdd文件是需要CANdela 来完成的,一个 liscense 就要将近二十万,成本确实高🍅特别是在处理22/2E/31服务的时候,频繁的增加功能,可能需要频繁的用CANdela 修改CDD,我测试开发过程中,一般很少去修改cdd,有这个时间,纯手撸也开发完了,就一个CANdela,鬼知道此时此刻到了谁手里,我也懒得去找。🍅演示软硬件环境;目录📘前言。

蚂蚁小兵 5756

《JAVA编程思想》阅读笔记 第7章 复用类

编译器并非为每一个引用都默认创建对象,以减少不必要的开销。一种初始化方式是,在使用对象前再初始化,称为惰性初始化。 即使一个类不是 public 类型,其 public main() 方法仍可被访问。 继承的一般规则:数据成员指定为 private,方法为 public。对于基类子对象的正确初始化,是通过在构造器中调用基类构造函数来执行的,java会自动加载基类的构造函数,确保在使用子类对象前...

搬砖咸鱼 194

5G/NR 网络切片基本概念(协议版)

26.1 网络切片概念 网络切片是一个概念,可以根据每个客户的要求进行区别对待。通过切片的形式,将不同流量差异化处理,以及可以将资源进行隔离,然后移动网络运营商可以将客户视为属于不同租户类型的客户,每种客户具有不同的服务要求,这些要求根据每个租户根据SLA (Service Level Agreement,服务水平协议)可以使用哪种切片类型进行管理和订阅。 网络切片始终由RAN部分和CN部...

欢迎来到小七的博客,这里将带你深入探索5G通信的神秘世界。无论你是通信领域的专业人士还是对这一领域充满好奇心的技术爱好者,这里都有专业协议解读、通信知识普及以及有趣的Python编程内容等你发现。 1万+

java学习笔记 java编程思想 第7章 复用类

文章目录7.1 组合语法练习17.2 继承语法 java中解决问题都是围绕类展开的。不需要重头编写代码,可以通过创建新类来复用代码。 有两种方法重用代码,不破坏以前的代码: 组合:在新的类中定义一个现有类的对象引用。由于新的类是有现有类的对象所组成的,所以这种方法叫做组合。 继承:安装现有类的类型来创建新的类,不需要改变现有类的形式。使用现有类的形式并向其中添加新代码。这中方法叫做继承。 7.1 组合语法 只需要将对象引用加载新的类中即可。 package com.qww.test01; publi

qq_40648976的博客 1083

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

《Java编程思想》读书笔记 —— 第7章 复用类,第8章 多态

文章目录第七章 复用类1. 组合语法2. 继承语法3. 向上转型4. 代理5. 组合与继承的结合和选择使用6. protected关键字7. final关键字8. 有继承情况下的初始化第八章 多态1. 再论向上转型2. 关于绑定3. 容易出错的两个陷阱4. 构造器和多态4.1 继承与清理4.2 构造器内部的多态方法的行为5. 协变返回类型6. 关于向下转型 第七章 复用类 在Java中可以通过...

banqinghe的博客 342

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java编程思想学习笔记——第7章 复用类

7.8 final关键字 final指得是“这是无法改变的”。不想做改变可能出于两种理由:设计或效率。 可能使用到final的三种情况:数据、方法和类。 7.9初始化及类的加载 加载时众多变得更加容易的动作之一,因为Java中的所有事物都是对象。请记住,每个类的编译代码都存在与它自己的独立的文件中。该文件只在需要使用程序代码时才会被加载。一般来说,可以说:“类的代码在初次使用时才加载。” ...

良月柒 321

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java 编程思想 第7章 复用类 笔记

类中域为基本类型时能够自动被初始化为零,但是对象引用会被初始化为null。extends关键字实现,会自动得到基类中所有的域和方法。组合技术只需将对象引用置于新类即可。

weixin_42199601的博客 149

《Java 编程思想》-第7章 复用类 笔记

第7章 复用类

会飞的大象 493

[学习笔记][Java编程思想]第7章:复用类

使用类而不破坏现有程序代码。 在新的类中产生现有类的对象,由于新的类是由现有的类的对象所组成,所以这种方法称为组合。 按照现有类的类型来创建新类,无需改变现有类的形式,采用现有类的形式并在其中添加新代码,这种方式称为继承。 1 组合语法 组合只需将对象引用置于新类中即可。 每一个非基本类型的对象都有一个toString()方法,而且当编译器需要一个String而你却只有一个对象时,该方法会被调用。

lbt_never的博客 323

Java编程思想 - 第7章、复用类

代码的复用has a: 组合 is a: 继承 中庸之道:代理1,组合,继承,代理为了继承,一般的规则是将所有的数据成员都设置为private,而将所有的方法都设置为public。这样,当不同的包下的类继承该类时,就可以获得该类所有的方法,和包内、包外没有区别。如果不加修饰符,就是限制包内访问,那么包外继承的时候,只能获得public修饰的方法,这样内外的方法不一致,就会出现问题了。当然,特殊情况需

mfcheer 575

《Java编程思想》笔记之第7章——复用类

Java类复用的两种方法:第一种:只需在新的类中产生现有类的对象。由于新的类是由现有类的对象所组成,所有这种方法称为组合。该方法只是复用了现有程序代码的功能,而非它的形式。第二种:按照现有类的类型来创建新类。无需改变现有类的形式,采用现有类的形式并在其中添加新代码。这种神奇的方式称为继承,而且编译器可以完成其中大部分工装。继承是面向对象程序设计的基石之一。...

Zhe_King的博客 259

Java编程思想(第四版) - 第7章 复用类

复用类

overkill 175

java 内嵌调用_《JAVA编程思想》5分钟速成:第7章(复用类)

第7章 复用类7.1 名称屏蔽:在C++中,如果基类拥有一个已被多次重载的方法名称,那么在其派生类中重新定义该方法名称,就会屏蔽其基类中的任何版本,这叫做名称屏蔽。但是在Java中,就种情况下,不会发生名称屏蔽,即无论在派生类还是在基类中对方法进行定义,重载机制都可以正常工作。7.2 @Override注解Java SE5新增加了@Override注解,可以把它当作关键字来用,它的作用是告诉编译器...

weixin_39725154的博客 226

《java编程思想》学习笔记7 第7章 复用类

1,组合(composition):   新的类由现有的类的对象组成,这种方法称为组合;   2,继承:按照现有类的类型来创建新类,无需改变现有类的形式。   3,带参数的构造器   class Game {  Game(int i) {    print("Game constructor");  }} class BoardGame extends Game {  Board...

liguangyuanyinli的博客 148

Java编程思想,读书笔记五(第7章 复用类)

       第7章 复用类       复用代码是Java众多引人注目的功能之一。利用现有类型生成新类型,从而达到代码的复用,主要有组合和继承两种方式。       组合。只需将对象引用置于新类中即可,将一个类的对象作为另一个类的成员变量(字段)。类中的字段为基本类型时,会初始化为0,boolean类型会初始化为false,String类型属于引用会初始化为null。当字段为对象引用时,会被初始...

闫玉林的博客 450

Java编程思想学习笔记(六) 第7章 复用类

为类文件中的每个类都添加一个mai()方法,可以使每个类的单元测试都变得简单。调用方法:在命令行输入java + 单元类名。 当new一个对象时,构建过程时从基类“向外”扩散的,所以基类在导出类构造函数访问之前就已经完成了初始化。 “is-a”(是一种)的关系时用继承来表达的,而”has-a”(有一个)的关系是用组合来表达的。 protected关键字,就类用户而言,这是private的,但对于任

166
上一篇: 第六章 访问权限控制(java编程思想)
下一篇: 第8章 多态(java编程思想)
printf_myself
博客等级 码龄7年 1粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值