1、超类和子类

超类和子类

父类与子类

多态:

一个对象变量可以指示多种实际类型的现象称为多态

一个变量可以引用父类对象,也可以引用其子类对象,这就是多态。

不能将一个超类的引用赋给子类变量,因为调用子类方法时可能发生运行错误

子类引用可以赋给超类引用

动态绑定:

在运行时能够自动地选择哪个方法的现象称为动态绑定

是一个非常重要的特性,无需对现存的代码进行修改,就可以对程序进行扩展。

阻止继承:final类和方法

将方法和类声明为final主要目的是:确保它们不会在子类中改变语句

强制类型转换

只能在继承层次内进行类型转换。

在将超类转换成子类之前,应该使用instanceof进行检查。

抽象类

使用abstract关键字,这样就完全不需实现这个方法。

为了提高程序清晰度,包含一个或多个抽象方法的类本身必须被声明为抽象的。

除了抽象方法外,抽象类还可以包含具体数据和具体方法。

尽量将通用的域和方法(不管是否是抽象的)放在超类(不管是否是抽象类)中

扩展抽象类

1 子类中定义部分抽象方法或抽象方法也不定义,这样就必须将子类也标记为抽象类

2 定义全部的抽象方法,子类就不是抽象的了

抽象类不能被实例化 (不能new)这个类的对象

可以创建一个具体子类的对象,可以定义一个抽象类变量,但是它只能引用非抽象子类的对象。

受保护访问

private 子类不能访问超类的私有域,

protected 允许子类访问超类的某个域

2、Object:所有类的超类

Object是Java的始祖,在Java中每个类都是由它扩展而来

可以使用Object类型的变量引用任何类型的对象

eqluas方法

用于检测一个对象是否等于另一个对象,在Object类中,这个方法将判断两个对象是否具有相同的引用。

在子类中定义equals方法时,首先调用超类的equals。如果检测失败,对象就不可能相等。

如果超类中的域都相等,就需要比较子类中的实例域。

相等测试与继承

Java语言规范要求equals方法具有下面的特性:

自反性:x.eqluas(x) 返回true

对称性:当且仅当x.eqluas(y) 返回true,y.eqluas(x)返回true

传递性:如果x.eqluas(y)返回true,y.eqluas(z)返回true,x.equlas(z)也应该返回true

一致性:如果x,y引用的对象没有发生变化,反复调用x.eqluas(y)应该返回同样的结果

对于任意非空引用x,x.eqluas(null) 应该返回false

对称性,instanceof 子类与超类的比较

如果子类能够拥有自己的相等概念,则对称性需求将强制采用getClass进行检测

如果由超类决定相等的概念,那么就可以使用instanceof进行检测,这样可以在不同子类的对象之间进行相等的比较。

编写一个完美的equals方法的建议:

1 显式参数命名为otherObject,稍后需要将它转换成另一个叫做other的变量

2 检测this 与 otherObject是否引用同一个对象:

if(this == otherObject) return true;

3 检测otherObject是否为null,如果是null ,返回false

if(otherObjecr == null) return false;

4 比较this 与 otherObject是否属于同一个类。

如果equals的语义在每个子类中所改变,就使用getClass检测

if(getClass != otherObject.getClass()) return false;

如果所有的子类都拥有统一的语义,就使用instanceof检测

if(!otherObject instanceof ClassName) return false;

5 将otherObject转换为相应的类类型变量

ClassName other = (ClassName)otherObjecrt;

6 现在开始对所有需要比较的域进行比较了。使用==比较基本类型域,使用equals比较对象域。

如果在子类重新定义equals,就要调用super.equlas(other);

hashCode方法

散列码(hashCode)是由对象导出的一个整数值。

hashCode定义在Object类中,因此每个对象都有一个默认的散列码,其值为对象的存储位置。

如果重新定义equals方法,就必须重新定义hashCode方法,以便用户可以将对象插入到散列表中

toString方法

3、泛型数组列表

访问数组列表对象

ArrayList

不必指出数组的大小

使用add将任意多的元素添加到数组

使用size()替代length计算元素的数目

使用a.get(i)替代a[i]访问元素

4、对象包装器与自动装箱

基本类型 转换为 对象

5、参数数量可变的方法

省略号...是Java代码的一部分,它表明这个方法可以接收任意数量的对象

6、枚举类

Enum

7、反射

反射机制:

在运行中分析类的能力

在运行中查看对象

实现通用的数组操作代码

利用Method对象

Class类

Class.forName().newInstance();

捕获异常

try catch

利用反射分析类的能力

Field Method Constructor

三个类都有

getName返回项目的名称

getModifiers 返回一个整型数值,描述修饰符

Field getType 返回描述域所属类型的Class对象

getFileds

getDeclaredFileds

在运行时使用反射分析对象

setAccessible

使用反射编写泛型数组代码

CopyOf

调用任意方法

Method invoke

8、继承设计的技巧

1、将公共操作和域放在超类

2、不要使用受保护的域

3、使用继承实现 is-a 关系

4、除非所有集成的方法都有意义,否则不要使用继承

5、在覆盖方法时,不要改变预期的行为

6、使用多态,而非类型信息

7、不要过多的使用反射

原文:http://www.cnblogs.com/loveincode/p/7188320.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/536643.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/536643.shtml
英文地址,请注明出处:http://en.pswp.cn/news/536643.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kaka 1.0.0 重磅发布,服务于后端的事件领域模型框架。

百度智能云 云生态狂欢季 热门云产品1折起>>> kaka 1.0.0正式发布了,从三个月前的kaka-notice-lib 1.0.0的发布,经过多次研磨,终于迎来了本次重大更新。 kaka是一款服务于java后端的事件领域模型框架,主要目的为解耦业…

java配置文件工具类,java项目加载配置文件的工具类

java项目加载配置文件的工具类package com.loadproperties;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class ConfigUtil {private static InputStream input;private volatile Properties configuration new Properties();/…

如何把WAV格式音频转换为MP3格式

WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,因此在声音文件质量和CD相差无几&…

php 异步处理类,php异步处理类

该类可以请求HTTP和HTTPS协议,还可以处理301、302重定向以及GZIP压缩等。[PHP]代码//使用方法require(asynHandle.class.php);$obj new asynHandle();$result $obj->Request(http://baidu.com);$result2 $obj->Get(https://mail.google.com/);echo "{…

恶意软件盯上了加密货币,两家以色列公司受到攻击

近日,网络安全公司Palo Alto Networks威胁研究部门Unit 42发博称,已确认Cardinal RAT自2017年4月起对两家从事外汇和加密交易软件开发的以色列金融科技公司发起过攻击。 Cardinal RAT是可远程访问特洛伊木马(RAT),攻击…

php 自定义打印模板下载,PHP – 创建自定义模板系统?

我已经在这里搜索过,令人惊讶的是我找不到答案.我发现了一个类似的线程,但没有真正的解决方案.复杂的部分是循环,如果我不需要循环我可以只是做一个常规替换.所以,我有一个带有一些标记的.html文件,如下所示:{{startloop}}{{imgname}}{{endLoop}}我想要做的是用其他…

腾讯财报中“最大秘密”:2018云收入91亿元,交首份TO B答卷

腾讯财报中“最大秘密”云业务收入又一次被公开了:2018年,腾讯云收入91亿元,增长100%。 3月21日,腾讯发布2018年Q4及全年财报,2018全年收入3126.94亿元同比增长32%,净利润(Non-GAAP)774.69亿元。而被列进“…

根据坐标如何在matlab中l连成曲线,matlab中,如何将两条曲线画在一个坐标系里,plot(x1,x2,y1,y2)还是怎样...

matlab中,如何将两条曲线画在一个坐标系里,plot(x1,x2,y1,y2)还是怎样以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!matlab中,如何将两条曲线画在一个坐…

Android 物联网 传感器

前几天做了一个嵌入式课设。将传感器收集到的数据传到手机制作的APP里。 项目中涉及到的主要的java代码和xml布局文件上传到了github,https://github.com/123JACK123jack/Android转载于:https://www.cnblogs.com/libin123/p/10578601.html

java已被弱化签名,高效Java第四十条建议:谨慎设计方法签名

作用有助于设计易于学习和使用的API。如何做——谨慎地选择方法的名称1.选择易于理解的,并且与同一个包中的其他名称风格一致的名称。2.选择与大众认可的名称相一致的名称。如何做——不要过于追求提供便利的方法每个方法都应该尽其所能。方法太多会使类难以学习、使…

curl有php内存缓存,PHP CURL内存泄露的解决方法

PHP CURL内存泄露的解决方法curl配置平淡无奇,长时间运行发现一个严重问题,内存泄露!不论用单线程和多线程都无法避免!是curl访问https站点的时候有bug!内存泄露可以通过linux的top命令发现,使用php函数mem…

MySQL学习【第五篇SQL语句上】

一.mysql命令 1.连接服务端命令 1.mysql -uroot -p123 -h127.0.0.1 2.mysql -uroot -p123 -S /tmp/mysql.sock 3.mysql -uroot -p123 -hlocalhost 4.mysql -uroot -p123 2.mysql登陆后的一些命令 1.\h或者help   查看帮助 2.\G       格式化查看数据(以k…

phpexcel.php linux,phpexcel在linux系统报错如何解决

最近有个tp3.2的项目迁移到linux系统上了,突然有天发现原本在win server 2008上运行没问题的excel导出功能在新的系统上不能使用了。报错如下:说是1762行有问题,找到这个文件的代码看看:/*** Get an instance of this class** acc…

优雅的redux异步中间件 redux-effect

不吹不黑,redux蛮好用。只是有时略显繁琐,叫我定义每一个action、action type、使用时还要在组件上绑定一遍,臣妾做不到呀!下面分享一种个人比较倾向的极简写法,仍有待完善,望讨论。 github: github.com/li…

oracle 中累加函数,Oracle 分析函数分组累加!

用户号码 登陆时间13000000002010-01-0113000000012010-01-0113000000022010-01-0213000000012010-01-0213000000032010-01-0313000000022010-01-0313000000042010-01-0413000000032010-01-0413000000042010-01-0213000000062011-01-0413000000012011-01-04剔除重复登陆的用户,…

asp.net core系列 48 Identity 身份模型自定义

一.概述 ASP.NET Core Identity提供了一个框架,用于管理和存储在 ASP.NET Core 应用中的用户帐户。 Identity添加到项目时单个用户帐户选择作为身份验证机制。 默认情况下,Identity可以使用的 Entity Framework (EF) Core 数据模型。 本文介绍如何自定义…

oracle中创建游标,oracle 存储过程创建游标

Oracle与Sql Server差异点详解1、create函数或存储过程异同点Oracle 创建函数或存储过程一般是 create or replace ……SQL SERVER 则是在创建之前加一条语句,先判断是否已经存在,如果存在删除已有的函数或存储过程。函数语句:if exists (sel…

hosts文件不起作用

突然发现电脑的hosts文件不起作用了。之前用的狠正常,近期也没有修改过。首先排除什么格式、DNS、注册表之类的问题。最终解决办法(权限问题:有问题的hosts文件图标上有个锁):1.C:\Windows\System32\drivers\etc下复制…

oracle面临的挑战,未来数据库管理员面临的三大挑战

原标题:未来数据库管理员面临的三大挑战前言今天的数据库管理员面临着三大挑战:工作重心向以应用程序为中心转移、支持多个数据库平台的需求、在云端以及在本地管理数据库性能的责任不断扩大。为了在今天和未来都能站稳脚跟,数据库管理员需要…

Reducer拆分

看到Redux官网上Reducer拆分后,最后生成的state的组合有点懵,主要是对combineReducers()这个工具类不了解,其实该方法是消除了一些样板代码。 如todoApp事例: import { combineReducers } from reduxconst todoApp combineReduce…