第五章 继承
1. super关键字的两种用法
1)调用父类的方法:super.methodName()
2)调用父类的构造器:只能作为构造器的第一条语句出现。构造参数可以传递给本类其他构造器,也可以传递给父类(具体实现?)
复习:this关键字两个作用:1. 引用隐式函数 2. 调用该类的其他构造器
2. 多态
置换法则:任何出现父类的地方都可以用他的子类替换
3. final:将方法或者类声明为final的主要目的是确保他们不会在子类中改变语义
final类,无法扩展(无法被继承)的类
final方法 不能被子类覆盖的方法
4. 抽象类
包含抽象方法的类必须声明为抽象类,抽象类不能被实例化, 即不能创建抽象类的对象,但可以创建具体子类的对象。
除了抽象方法外,还可以包括具体数据和具体方法。抽象方法充当着占位的角色,他的具体实现在子类中。
扩展抽象类有两种方法,1. 在子类中定义部分抽象类或者不定义抽象类方法,此时子类也必须声明为抽象类。2. 在子类中定义全部的抽象方法,此时,子类就不是抽象的了。
5. 受保护访问 protected
允许子类访问的类声明为protected
复习:Java用于控制可见性的4个访问修饰符 1. 仅对本类可见 private 2. 对所有类可见 public 3. 对本包和所有子类可见 protected
4. 对本包可见 (默认不需要修饰符)
6.(?) equals方法:,一般用于比较对象,判断两个对象是否有相同的引用,内存空间的内容是否相同
复习:==:== 对比两个对象基于内存引用,习惯用语基本数据类型的比较,判断两个变量或实例是不是指向同一个内存空间 。
7.比较this和otherobject是否属于同一个类,用getClass:if(getClass()!=otherobject.getClass())return flase;
如果所有的子类都有统一的语义,就用instanceof检测 if(!(otherobject instanceof ClassNmane)) return false
8. 如果在子类中重新定义equals,就要在其中包含调用super.equals(others)
对于数组,可用Arrays.equals检测
9. hashcode方法:判断对象是否相等(具体)
10. 所有的基本类型都有一个包装器,将基本类型装换成对象,在很多情况下,可以自动拆箱或装箱
11.参数数量可变的方法:例如printf
也可以自定义可变参数方法,比如double max(double... values)
甚至main方法public static void main(String... args)
12. 枚举类:例如普遍流传enumerateSize{SMALL,MEDIUM,LARGE}
实际上,这个声明定义的是一个类,有需要的话,可以增加构造器,方法和域。
所有的枚举类型都是enum的子类,他们继承了这个类的许多方法,比如toString,其逆方法valueOf