一、Java继承详解
Java继承
目录:
1.为什么要”继承“?
2.继承的类型
2.1 单继承
2.2 多重继承
2.3 多个子类继承一个基类
2.4 Java没有多继承
3.继承的特性
4.继承关键字✨
4.1 extends-继承类
4.2 implements-继承接口,可以变相实行多继承
4.3 super-父类(直接看成类名)
4.4 this-当前类
4.5 final
4.5.1 final修饰类-不继承
注:final修饰的类中,成员方法默认为final,成员变量不是默认为final
4.5.2 final修饰成员方法-只继承不能重写
4.5.3 final修饰成员变量-常量
4.6 构造器
4.6.1 无参构造器-默认调用父类的无参构造器
4.6.2 有参构造器-用super关键字调用父类的有参构造器
二、要注意的点
1.构造器
(1)子类的构造器中调用父类的构造方法必须放在第一行,否则会报错
(2)子类的构造器如果没有调用父类的有参构造方法,就会在第一行默认调用父类的无参构造方法,但子类的构造器如果调用了父类的有参构造方法,则不会默认调用父类的无参构造方法
(3)子类的构造器中调用父类的有参构造器要用super关键字
(4) 父类如果含有有参构造方法,最好显示写出无参构造方法,因为子类可能会默认调用父类的无参构造方法,如果不显示写出无参构造方法,则会报错
代码来源
//基类的无参构造器和有参构造器
class SuperClass
{
private int n;
//无参构造器
SuperClass()
{
System.out.println("SuperClass()");
}
//有参构造器
SuperClass(int n)
{
System.out.println("SuperClass(int n)");
//this.n指向的是变量n,n指向的是参数n
this.n = n;
}
}
class SubClass extends SuperClass
{
private int n;
SubClass()
{
//调用父类有参构造器,则不会自动调用父类的无参构造器
super(300);
System.out.println("SubClass");
System.out.println("————————————————");
}
public SubClass(int n)
{
//第一行默认调用父类无参构造器
//Super()
System.out.println("SubClass(int n):"+n);
this.n = n;
}
}
public class InitializerTest {
public static void main(String[] args) {
SubClass sc = new SubClass();
SubClass sc2 = new SubClass(200);
}
}
输出结果为:
SuperClass(int n)
SubClass
————————————————
//默认调用父类的无参构造器
SuperClass()
SubClass(int n):200
搞笑一刻
来自@FS