关于继承的基本知识就不赘述了。关键字:extends,单继承,方法重写,super,this,final,子类父类,抽象类等。
继承
- 多态
一个对象变量可以指示多种实际类型的现象被称为多态。
子类的每个对象也是超类的对象,因此可以将子类的对象赋给超类变量。 - 动态绑定
在运行时能够自动的选择调用哪个方法的现象称为动态绑定。 - 方法调用过程
①编译器查看对象的声明类型和方法名。将所有重载的方法列举出来。
②查看调用方法时提供的参数类型。进行重载解析,如果匹配不到或者匹配到多个抛出异常。
③如果是private .static.final方法。编译器可以确定是哪个方法,那么这种调用就是静态绑定。如果要依赖隐式参数,那么在运行时实现动态绑定。
④如果是动态绑定调用。如果隐参类型刚好与子类方法匹配,直接调用,否则根据方法表搜索。 - 完美的equals方法
public boolean equals(Object otherobj){
//是否引用同一对象
if(this==otherobj)return true;
//检测是否为null
if(otherobj==null)return false;
//是否属于同一个类,如果子类有改变用getClass,语义都统一用instanceof
if(getClass()!=otherobj.getClass()) return false;//或者 if(!(otherObj instanceof ClassName)) return false;
//转换为相应类型变量
ClassName obj=(ClassName) otherobj;
//比较==比较基本类型,用equals比较对象域
return field1==oherobj.field1
&& Object.equals(filed2,oherobj.filed2)
&&.。。;
}
枚举类
- 定义
最简单的
public enum Size{SMALL,MEDIUJ,LARGE,EXTRA_LARGE};
复杂的
public enum Season {
// 枚举列表必须写在最前面
winter, spring, summer, fall;
private final static String l = "flower";
public static Season getBest() {
if (location.equals("flower"))
return spring;
else
return summer;
}
}
比较枚举类是只需要使用==就行。
- 用途
用户常量,或者switch中
使用例子
//传入int值返回月份名称
public enum Mon {
一月,
二月,
三月;
private static final Mon[] ENUMS = Mon.values();
public static Mon get(int i){
if (i < 1 || i > 3) {
System.out.println("超出范围");
}
return ENUMS[i-1];
}
}