继承,可以对共性抽取,实现代码重用,完成代码简化
简单来说,子类继承父类,那么子类继承了父类的属性和方法。
我们可以从多个角度理解java中的继承
类与对象角度
一个父类,可以有多个子类
而一个子类可以有多级父类,只能有一个直接父类,父类也叫基类,超类,子类也叫派生类
所有对象均继承自 Object 类,即 java.lang.Object
1.子类声明中使用 extends 关键字
子类声明语法: 子类名 extends 父类名
class A{ //父类
public A(int a){
System.out.println("A的构造方法");
}
String name = "A";
String age = "age";
public void say() {
System.out.println("I am A class");
}
public void call() {
System.out.println("A call");
}
}
class B extends A{ //子类
public B() {
super(10);
System.out.println("B的构造方法");
}
String name = "B";
public void haha() {
System.out.println("haha");
}
@Override
public void call() {
System.out.println("B call");
}
}
2.子类可以当作父类使用
A a = new B();
不但在对象创建上,它也体现在方法的传参,返回值上,可以传递或返回子类对象。
这里实际是多态的一种思想,不过多赘述,请参考多态。
成员变量角度
子类继承父类的成员变量
1.成员同名变量使用规则:优先使用本类,没有则向上找
B b = new B();
System.out.println(b.name); //B
System.out.println(b.age); //age
2.子类中,局部变量,成员变量,与父类成员变量的调用
局部变量名:变量名;
成员变量名:this.成员变量名;
父类成员变量名:super.成员变量名;
成员方法角度
子类继承父类的成员方法
1.成员变量同名规则:优先使用本类,没有则向上找
B b = new B();
b.haha(); //haha
b.call(); //A call
2.子类中,成员方法,与父类成员方法的调用
成员方法:方法名
父类成员方法:super.成员方法名;
3.子类同名成员方法(方法覆盖重写),使用 Override 注解检测
该注解,仅起到检测作用,不写该注解,子类代码正常时也能运行
在重写时,权限修饰符要么相同,要么更宽松,声明抛出的异常要么相同,要么更小。
@Override
public void call() {
System.out.println("B call");
}
构造方法角度
1.子类创建时,必须先调用父类的构造方法,再调用子类构造
2.子类的构造方法不写时,默认赠送 super();
3.如果父类没有无参构造,无法赠送 super();
4.第3种情况下,子类构造的第一行语句,必须写 super(参数);
(该语句只能在子类构造中的第一句调用,其他地方均无法调用,且不能与this同时使用)