一、继承
1、object类
面试题:请写出object类的6个方法
方法摘要(public方法) | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
方法摘要(protected方法) | |
|
|
|
|
2、成员变量的隐藏
父类和子类拥有同名变量,分别占有自己的空间,优先使用子类中的变量。
注意:
- 构造方法的第一条语句默认是super(),含义是调用父类无参数的构造方法
- 每个类创建时最好提供无参构造方法
- 构造方法的第一条语句可以是通过super或者this调用构造方法,须是第一条语句
- 构造方法中不能同时使用super和this调用构造方法,并不是说不能同时出现this和super
3、super关键字
super可以调用父类成员变量、构造方法、方法。
注意:
- super调用普通方法,位置没有限制
- super调用构造方法,必须放在第一行
- 若是构造方法的第一行代码没有显式的调用super(...)或者this(...);那么Java默认都会调用super(),含义是调用父类的无参数构造方法。
4、==和equals
- ==:基本类型表示值相等,引用类型表示地址值相等。
- equals:Object默认比较两个对象的hashcode。
- 要比较两个对象的内容是否一致时,需重写equals方法
5、组合
继承:is-a 组合:has-a
组合:
- 定义一个CPU类、KeyBoard类、Mouse类
- 定义一个电脑类,将CPU、KeyBoard、Mouse类当作Computer类的属性
- 购买配件:在Test类中,分别new一个CPU、KeyBoard、Mouse
- 组装电脑:new一个Computer,传入CPU、KeyBoard、Mouse
- 开机运行电脑。
二、多态
1、多态:父类引用指向子类对象
要点:
- 多态与属性无关
- 前提条件:继承、方法重写、父类引用指向子类对象
- 父类引用调用子类重写方法时,多态就出现了
2、向上转型
将子类对象赋给父类引用,称为向上转型(upcasting),自动进行类型转换。
注意:向上转型之后,可以调用子类继承的方法,但不能使用子类特有方法。
3、向下转型:调用子类特有方法。
将父类的引用变量转换为子类类型,称为向下转型(downcasting)。
为了避免ClassCastException,向下转型之前使用instanceof先判断一下。
instanceof:判断左边对象是不是右边的类型的实例。
四、简单工厂模式-返回值是父类类型
不仅可以使用父类做方法的形参,还可以使用父类做方法的返回值类型,真实返回的对象可以是该类的任意一个子类对象。
基本要求:
- 定义一个static方法,通过类名直接调用
- 返回值类型是父类类型,返回的可以是其任意子类类型
- 传入一个字符串类型的参数,工厂根据参数创建对应的子类产品