继承
注意点:父类没办法使用子类中的方法
强制类型转换
某些不能强制转换的(例如 String转实体类)会报错
只能在继承层次内进行强制类型转换
多态
子类继承父类,重写父类的方法
父类引用指向子类对象的时候,先调用的是子类的方法,如果没有再调用父类的方法
多态实现的必要条件
1. 子类必须继承父类
2. 必须有重写
3. 父类引用指向子类对象
抽象类
抽象类的修饰符 abstract
抽象类没有办法直接构建一个对象,尤其专指new
抽象类的几个特点
- 可以有普通方法----------------------(但抽象方法必然在抽象类中)
- 可以有构造函数
- 没有抽象属性
一个类继承抽象类的要求
- 重写所有的抽象方法
- 或把它自己也声明成一个抽象方法
实例:
抽象类
public abstract class Change { public abstract void eat(); }
类继承抽象类
public class ChangeSon extends change { @Override public void eat() { } }
或把此类也改成抽象类
public abstract class ChangeSon extends change { }
抽象类中,可以有构造方法,供子类创建对象时初始化父类成员使用
接口
接口和抽象类的区别?
抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为规范
接口可以多继承,而抽象类只能单继承
Object
equals方法
在object的类里面,如果两个引用指向同一个对象,用equals判定是相等的
但如果不在object的类,比如两个String 用 equals判断的时候,此时的equals被重写了,只需要判断两个String里的值是否相等,如果相等equals判断就为true
hashCode
特征码值,在各种集合(HashMap,HashSet)
Object类里面,equals hashcode获得的是相同的表现,
如果equals相等,hashcode相等
equals不等,hashcode不一定不等
equals不一样代表着不在同一个位置,hashcode自然而然也是不一样的
1.为什么重写equals要重写hashcode?
在hashmap等系列的集合里面,hashCode参与确定对象的位置,当equals判断相等的时候,hashCode也相等
假如我们重写equals没有重写hashcode,equals判定相等,但是在hashmap中不是同样的位置,集合就会产生错误
另一方面:从object中,如果equals判断对象相等,特性一样,hashCode应该也一样,而如果重写equals没重写hashcode,equals判定相等的时候,hashcode可能不一样,此时需要重写hashcode
反射
三种获得类信息的方式
- 类名.class
- 对象.getClass();
- Class.forName("全限定名")
注:全限定名:包名+类名 (ex:com.test.Test.java)
简易MVC