构造函数
也叫构造方法,取名必须与类名相同;
注意:调用子类构造函数时,首先调用父类构造函数,然后调用子类构造函数。
在子类中,如果不加关键字super的话,默认调用的是子类的方法,super关键字调用父类的方法:
public class A {
private String nameA="A";
public void getName() {
System.out.println("父类"+nameA);
}
public static void main(String[] args) {
}
}
public class B extends A{
private String nameB="B";
@Override
public void getName() {
System.out.println("子类"+nameB);
super.getName();
}
public static void main(String[] args) {
B b=new B();
b.getName();
}
}
运行结果:
子类B重写了父类A的getName方法,并打印出了“子类B”;然后使用super调用了父类的getName方法打印出“父类A” 。这里必须使用super
如果不明确出来,按照子类优先的原则,相当于还是再调用重写的getName()方法,此时就形成了死循环,执行后会报java.lang.*Error异常。如下图所示:
同样,super也可以用来调用父类的变量,但是注意我们通过super是不能访问父类private修饰的变量和方法的,因为这个只属于父类的内部成员,一个对象是不能访问它的private成员的。
抽象类
abstract 用于定义抽象类和其中的抽象方法。
什么是抽象类?
首先,抽象类是不允许被实例化的;
其次,抽象类中的抽象方法必须被子类实现。
参考链接:https://blog.csdn.net/yongbutingxide/article/details/82669054;https://www.cnblogs.com/flxy-1028/p/10959722.html