继承的本质是避免重复
- DRY(dont repeat youself)
- extends
- Java所有对象都继承了Object,拥有Object类的所有方法,比如:
- equals()
- toString()
- Java类不支持多重继承
继承中的类结构与初始化顺序
实例方法的覆盖
@Override
覆盖继承自父类的方法
设计模式:模板方法
- 提供一个”模板“,实现可以覆盖模板的全部或者部分方法
// 模板方法
// override模板方法里某些方法,以达到修改行为的目的
// 子类通过去覆盖writeBook里调用的方法,重新组合内容
public class BookWriter {
public void writeBook() {
writeHeader();
writeContent();
writeFooter();
}
// ...
}
// 子类
public class BookWriterChild {
@Override
public void writeContent() {
// 里面也可以调用父类的方法
super.writeContent();
System.out.println("child content");
}
}
向上 & 向下转型
最顶端是Object
- Integer -> Number -> Object
- instanceof 判断
null instanceof 任何对象:永远都是false
向上转型:任何子类都是父类的实例
当你需要一个父类对象的时候,你都可以传递一个子类,反之则会类型不匹配
向下转型:
转型不安全的时候必须显式转型
(Type)obj
final关键字&单例模式
- final修饰常量
-
1. final在方法上使用:禁止继承、覆盖、重写此方法
2. final在类上使用:禁止继承此类
继承提供了灵活性,但也埋下了隐患
- String/Integer等类都是final的
JDK把一些常见的类设为final
- Integer,String,Char等类型是final的,不可以被继承
- 不会被破坏约定,方法不会被覆盖
- 虚拟机可以进行一些激进的优化,提高性能