继承---super和方法重写
Super
子类中调用父类的方法/成员变量
私有的东西无法使用super调用
#调用父类的name属性:
super.name
#调用父类的方法
super.show()
子类的无参构造中会隐含一个父类的无参构造
即super();
若显性地调用super();作为构造器,则必须放在子类构造器的第一行.
同理,在子类自身的构造函数中调用另一个构造函数,也必须将此构造函数放在第一行.
#此为调用自身的构造器
public classname(){
this.classname(name);
System.out.println(name);
}
#此为调用父类的构造器
public classname(){
super();
System.out.println(name);
}
所以这两个构造器互斥,不能同时存在!
同时,由于子类默认调用父类的无参构造,当父类中未定义无参构造方法时,程序会报错.
为规避这一点,写程序时,若存在有参构造函数,则应尽量为每个类都补充无参构造方法.
重写
重写都是方法的重写,和属性无关
#重写
@Override
#'@'后的内容为注解,是有功能的注释
静态的方法调用只和左边的数据类型有关(static修饰的方法)
重写是指用@Override修饰过的,子类和父类同名的非静态方法
即使左边的对象的数据类型不同,只要右边为子类重写过的方法,则只调用子类的方法.
重写的要求:
- 有继承关系
- 子类重写父类的方法
- 方法名相同
- 参数类型相同
- 修饰符:范围可以扩大但不能缩小
- 抛出的异常:可以被缩小但不能扩大
快捷键: alt+insert : Override