在继承链上进行向下的转换的一些事项:
超类转换为子类前要检查(为什么要将超类转换成子类?这通常意味着超类的设计存在问题)
抽象类
如果一个方法用abstract修饰,则在这个类里就不用实现这个方法了
抽象类的语法和注意事项
子类是否实现抽象的影响:
注意:
关于抽象超类引用的问题:
关于调用的问题
通常的权限访问:
protected关键字的设计初衷
protected对所有子类以及同一个包中的所有其他类都可见
另外,默认情况下,不加修饰符的时候只对本包可见
Object类:
哪些是对象,哪些不是对象:
所以:
Object obj = new Employee("Mike", 100);
obj = new int[10];
是正确的
equals方法:
关于equals的初始含义和实际运行过程中应该有的含义:
equals方法的使用示例:
import java.io.Console; import java.time.*; import java.util.*; class Employee{ private String name; private int age; public Employee(String a_name, int a_age) { name = a_name; age = a_age; } // 如果要比较Manager是否相等,则可以先: // super.equals(obj) ... 进行比较大小 public boolean equals(Object o) { if(this == o) return true; if(o == null) return false; if(getClass() != o.getClass()) return false; // if (!super.equals(o)) // return false; // Employee oe = (Employee) o; // 如果name == null, 下面的写法就崩溃了,所以要下下种写法 // return name.equals(oe.name) && age == oe.age; return Objects.equals(name, oe.name) && age == oe.age; } } class Manager extends Employee{ public Manager(String n, int a) { super(n, a); } } public class Test{ public static void main(String[] args) { Employee a = new Employee("Mike", 100); Employee b = new Employee("Jack", 20); Manager m = new Manager("Ec", 21); System.out.println(a.equals(b)); System.out.println(a.getClass() == m.getClass()); } }
问题:
getClass 与 instanceof 有什么区别呢?
equals的替换性
。。。完美的equals方法