类、超类和子类
- java中采用extends进行继承
- Java的继承都是公有继承,意思是只继承公有方法和属性,但是父类可以通过提供公有的set、get属性,让子类间接具有父类的私有属性。
- 覆盖方法:只需要重写父类的方法,即可完成覆盖,调用父类的方法需要
super
关键字。
- 调用父类构造器
super(xx,xx)
,如果子类没有显示的调用父类的构造器,那么将会调用默认的空参构造器(如果没有直接报错)。
- 多态:一个对象变量实际有多种类型
- 动态绑定:在运行时,能够自动选择调用哪个方法
- 如果父类和子类都有getName方法,当子类转型到父类后,调用getName方法,其实执行的是子类的方法
- 理解方法的调用,c.f(string)的调用过程
- 找到c类和c父类所有叫f的方法
- 在找到的所有方法中,找到参数是string的方法(这里是允许参数中的类型转换的)
- 如果方法是private,static,final方法,是静态绑定,直接调用该类的方法就行
- 如果是动态调用,创建一个方法表,然后执行1-2步找到签名进行调用
- final阻止继承
- 将方法或者类声明为final目的是,确保不会在子类中改变语义
- 强制类型转换
- 只能在继承层次内进行类型转换
- 父类转子类前,应该使用instanceof进行检测
- 抽象类
- 抽象类中至少有一个抽象方法,该方法充当占位的作用
- 抽象类要么被子类实现,要么子类继续是抽象类。
- 抽象类不能被实例化
- 受保护访问
- public 所有类可见
- protect 同包或者子类可见
- defauct 同包可见
- private 仅自己可见
Object超类
- java中只有基本类型不是对象,其他类型都是Object的子类
- obj.equals方法用来比较两个对象是否有相同的引用。(字符串的equals比较值,是因为重写了equals方法)
- getClass方法返回对象所属的类
- equals四个特征:
- 自反性,对称性,传递性,一致性
- 一个完美equals的建议
- 显示命名参数为otherObject
- 检测this和otherObject是否是一个对象
- 检测otherObject是否为空
- 检测this与otherObject是否是同一个类
- 强转转换成(ClassName)成other变量
- 进行基本域的比较
- hashcode 返回一个对象的hash地址,用来判断对象是否相等
- toString更好的打印对象
- 打印数组需要Arrays.toString方法
- 打印深层数组需要Arrays.deepToString方法