Java核心技术卷1学习笔记5

Java核心技术卷1学习笔记5

继承

1、类,超类和子类

1.1、定义子类

关键字:extends,表示继承;

public class 子类 extends 父类 {}

子类(派生类/孩子类);超类(父类/基类)。

1.2、覆盖方法

超类中有些方法对子类不一定适用,可使用新的方法来覆盖(override)超类中的这个方法。
super 关键字:指示编译器调用超类方法;调用超类的构造器。
this关键字:引用隐式参数;调用该类其他的构造器。

1.3、子类构造器
1.4、继承层次

由一个公共超类派生出来的所有类的集合被称为继承层次。在继承层次中,从某个特定的类到其祖先的路径被称为该类的继承链。

1.5、多态

Java程序设计语言中,对象变量是多态的。

1.6、阻止继承:final类和方法

不允许扩展的类称为final类。

1.7、强制类型转换

例如:(将表达式x的值转换成整数类型,舍弃了小数部分)

double x = 3.121;
int nx = (int) x;
1.8、抽象类

关键字:abstract
类即使不含抽象方法,也可以声明为抽象类。
抽象类不能被实例化。

1.9、受保护访问

关键字:protected
修饰符:
private——仅对本类可见
public——对所有类可见
protected——对本包和所有子类可见
默认(不需要修饰符)——对本包可见

2、Object:所有类的超类

若无明确指出超类,Object就被认为是这个类的超类。

2.1、equals方法

用于检测一个对象是否等于另一个对象,该方法判断两个对象是否具有相同的引用。

2.2、相等测试与继承

equals特性:
(1)自反性:对于任何非空引用x,x.equals(x)应该返回true。
(2)对称性:对于任何引用x和y,当且仅当x.equals(y)返回true,y.equals(x)也应该返回true
(3)传递性:x.equals(y)返回true,y.equals(z)返回true则x.equals(z)返回true
(4)一致性:若x和y引用对象未变,则反复调用x.equals(y)返回结果相同
(5)x.equals(null)返回false

注:
==:比较的是地址值是否相同
equals:比较引用类型默认也是比较地址值是否相同,而String类重写了equals方法,比较的是内容是否相同

2.3、hashCode方法

散列码(hash code)是由对象导出的一个整型值。散列码是没有规律的;由于hashCode方法定义在Object类中,因此每个对象都有一个默认的散列码,其值为对象的存储地址。

2.4、toString方法

用于返回值表示对象值得字符串。

3、泛型数组列表

ArrayList是一个采用类型参数的泛型类,为了指定数组列表保存的元素对象类型,需要一对<>将类名括起加在后面。
使用add方法可以将元素添加到数组列表中。

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

所有的基本类型都有一个与之对应的类,这些类称为包装器。对象包装器是不可变的,即一旦构造了包装器,就不允许更改包装在其中值。对象包装器还是final,不能定义它们的子类。

5、参数数量可变的方法

6、枚举类

比较枚举类时可直接使用==而不需要调用equals;可在枚举类中添加一些构造器,方法和域。
所有的枚举类型都是Enum类的子类。每个枚举类都有一个静态的values方法,它返回一个包含全部枚举值得数组。

7、反射

反射库提供了一个非常丰富且精心设计的工具集,以便编写能够动态操纵Java代码的程序。

7.1、Class类

在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标志,这个信息跟踪着每个对象所属的类。虚拟机利用运行时类型信息选择相应的方法执行。可以通过专门的Java类访问这些信息。保存这些信息的类被称为Class。

7.2、捕获异常
7.3、利用反射分析类的能力
7.4、在运行时使用反射分析对象
7.5、使用反射编写泛型数组代码
7.6、调用任意方法

8、继承的设计技巧

1、将公共操作和域放在超类
2、不要使用受保护的域
3、使用继承实现“is-a”关系
4、除非所有继承的方法都有意义,否则不要使用继承
5、在覆盖方法时,不要改变预期的行为
6、使用多态,而非类型信息
7、不要过多的使用反射

发布了21 篇原创文章 · 获赞 19 · 访问量 599

猜你喜欢

转载自blog.csdn.net/weixin_44458246/article/details/104181916
今日推荐