【笔记】Java核心技术卷1-第五章_继承

5.1.5 多态

Manager boss = new Manager(. . .); 
Employee[] staff = new Employee[3]; 
staff[0] = boss;   //manager是employee的子类

在这个例子中,变量 staff[0] 与 boss 引用同一个对象。但编译器将 staff[0]看成 Employee对象。 这意味着, 可以这样调用

boss.setBonus(5000); // OK 

但不能这样调用

staff[0].setBonus(5000); // Error

这是因为 staff[0] 声明的类型是 Employee, 而 setBonus 不是 Employee 类的方法。

5.1.7 阻止继承:final类和方法

public final class ...

域也可以被声明为 final。对于 final 域来说, 构造对象之后就不允 许改变它们的值了。不过, 如果将一个类声明为 final, 只有其中的方法自动地成为 final, 而不包括域。

5.1.9 抽象类

抽象类不能被实例化。也就是说,如果将一个类声明为 abstract, 就不能创建这个类的对 象。例如,表达式
new Person("Vinee Vu")是错误的, 但可以创建一个具体子类的对象。 需要注意,可以定义一个抽象类的对象变量, 但是它只能引用非抽象子类的对象。例如, Person p = new Student("Vinee Vu", "Economics");这里的 p 是一个抽象类 Person 的变量,Person 引用了一个非抽象子类 Student 的实例。

5.2.1 equals方法

Objects.equals 方法。如果两个参数都为 null, Objects.equals(a,b) 调用将返回 true ; 如果其中一个参数为 null, 则返回 false ; 否则, 如果两个参数都不为 null, 则调用 a.equals(b)。

5.3.1 访问数组列表元素

下面这个技巧可以一举两得,既可以灵活地扩展数组, 又可以方便地访问数组元素。首 先,创建一个数组, 并添加所有的元素。

ArrayList<X> list = new ArrayList<>(); 
while (. . .) 
{ 
    x = . . 
	list.add(x); 
} 

执行完上述操作后,使用 toArray方法将数组元素拷贝到一个数组中。

X[] a = new X[list.size()]; 
list.toArray(a); 

除了在数组列表的尾部追加元素之外,还可以在数组列表的中间插入元素,使用带索引 参数的 add方法。

int n = staff.size() / 2; 
staff.add(n, e); 

为了插人一个新元素,位于 n之后的所有元素都要向后移动一个位置。如果插人新元素 后,数组列表的大小超过了容量, 数组列表就会被重新分配存储空间。 同样地,可以从数组列表中间删除一个元素。

Employee e = staff.remove(n); 

位于这个位置之后的所有元素都向前移动一个位置, 并且数组的大小减 1。

使用ArrayList

1.不必指出数组的大小。
2.使用 add 将任意多的元素添加到数组中。
3.使用 size() 替代 length 计算元素的数目。
4.使用 a.get(i) 替代 a[i] 访问元素。

猜你喜欢

转载自blog.csdn.net/Ethan_997/article/details/108404729