目录
| 继承
基础语法、父子类间的注意事项
Java继承特性:只能单继承、可以多级继承、可以多子类
继承的语法
[public] class 子类 extends 父类{
}
父子变量同名
父子变量重名(只会向该类的父类方向查找,绝对不会向子类查找,因为父类不知道子类在哪儿)
this、super、变量名的区别
若 方法的局部变量 和 方法所在的类中的成员变量 重名,可以用this. 来指出成员变量
若 方法的局部变量 和 方法所在类的父类中成员变量重名,可以用super. 来指出父类变量
class Fu{
int num = 10;//父类变量num
}
class Zi extends Fu{
int num = 20;//子类变量num
public void method(){
int num = 30;//子类方法变量num
}
}
System.out.println("子类方法中的变量(局部变量):"+num);
System.out.println("子类变量:"+this.num);
System.out.println("父类变量:"+super.num);
父子类构造方法的关系
抽象与覆盖
覆盖重写
@Override
-
保证父子类的方法名、参数列表完全覆盖。这样才是覆盖重写,否则是创建了一个新方法
-
子类方法的返回值 【必须小于等于 父类方法的返回值范围】(如 int < Object)
-
子类方法的权限 【必须大于等于 父类方法的权限修饰符】(public > protected > (default) > private)
-
super可以调用父类的方法
抽象
-
抽象类
-
可以定义普通方法
-
不能直接创建抽象类的对象!
-
必须用一个子类来继承抽象父类并重写抽象方法。
-
如果抽象类的子类还是抽象的,那么必须还有个更小的类来实例化
-
抽象类的构造方法和普通类的构造方法完全一样:【public 类名(){构造方法函数体}】不需要写abstract。抽象类子类的构造方法中,有默认的super()
-
若抽象类的子类是抽象类,那么 重写抽象父类中所有/部分 的抽象方法,都是被允许的,但是最终必须有一个非抽象的更小的继承类
-
-
抽象方法
-
抽象类不一定要包含抽象方法,但是有抽象方法的必定是抽象类
-
抽象方法不能定义方法体
-
-
语法
//抽象类
[public] abstract class 类名{
//抽象方法
public abstract 返回值类型 方法名();
}
抽象类的实例步骤示例
abstract class AbsClass{
public abstract void absMethod();
public abstract void absMethod2();
}
abstract class Son extends AbsClass{
@Override
public void absMethod2() {
}
}