- 一.继承的定义
当2个类中有共同的属性,可将它们归于子类。子类继承父类的成员方法和变量,从而达到代码复用效果。
class Dog extends Animal{
}//子类+extends+父类
- 二.子类中访问父类的成员变量
- 访问父类成员变量
public class Base {
int a;
int b;}
public class Derived extends Base{int c;
public void method(){
a = 10; // 访问从父类中继承下来的ab = 20; // 访问从父类中继承下来的b
c= 30;// 访问子类自己的}
}
2.当子类和父类是同名成员变量时
在子类中访问这个同名成员变量,访问的是子类。
如果要访问父类,需要使用关键字super(只能在非静态方法中使用)
class Base {
public int a = 1;
public int b = 2;}
class Derived extends Base {public int c = 3:
public int a = 4;}
public void method() {
a = 10;//这里的a是子类b = 20;
c = 30;
}
3.This 可访问父类子类,this访问同名成员变量时,优先访问子类
System.out.printin(super.a);System.out.println(this.a);
System.out.println(this.b);
System.out.println(this.c);
System.out.printin(super.a);
System.out.println(super.b);
- 三.构造与调用
子类继承父类后,一定要帮助父类构造,再构造自己。且只能在子类中调用父类的构造方法
注意:this不能与构造方法同时出现在一个类中,因为它们都需要在第一行
public Animal(String name){
this.name = name;
}//子类帮助父类进行构造初始化
class Dog extends Animal{
public Dog(String name){super(name);}//调用构造方法
}
- 四.静态实例代码块的执行
父类静态->子类静态->父类实例->父类构造方法->子类实例->子类构造方法
第二次实例化子类对象时,静态父类子类都不会执行
- 五.关键字final
当一个类不想被继承,使用关键字final
同理final修饰成员变量后,就不能修改了