继承
程序员文章站
2022-07-15 16:50:20
...
什么是继承?
继承:就是子类继承父类的属性和成员方法,使得子类具有和父类相同的属性,相同的行为
子类可以直接访问父类的非私有的属性和行为
继承的好处?
1. 提高代码的复用率
2. 类与类之间产生了联系,是多态的前提;
不能继承什么?
不能继承父类的私有属性和方法和构造器
如何使用父类中私有属性?
因为不能直接继承父类的私有属性,但是可以通过继承父类的setxx()和getxx()方法,
从而控制父类的私有属性;
为什么需要先初始化父类?
因为不能继承父类的构造器,但是类在使用之前都需要初始化,所以如果子类的构造器
中没有调用父类的构造方法时,系统会自动调用父类的构造方法对父类进行初始化;
如何初始化父类?
1. 没有自定义父类的构造函数
系统会自定义父类的构造函数,对父类进行初始化;
2. 如何自定义父类的构造函数
在子类构造函数的第一行使用super();调用父类构造函数对父类进行初始化;
public class Fu {
public int num = 1;
public Fu(){
System.out.println("调用了父类的构造方法");
}
public Fu(int a){
System.out.println(a);
}
}
public class Zi extends Fu {
public int num = 5;
public static void main(String[] args) {
Zi zi = new Zi(2);
}
public Zi(){
super(2);//调用父类的构造方法,必须在子类的构造函数内的第一句
// this();//this用于调用自己的构造函数,必须也再构造函数第一句
int num = 10;
System.out.println("调用了子类的构造方法");
System.out.println(super.num);//1 父类的成员属性num=1
System.out.println(num);//10 就近原则
System.out.println(this.num);//5 本类的成员属性num=5
}
public Zi(int a){
super();//只要是子类的构造方法的第一行即可
}
}
继承需要注意的问题?
1. Java支持单继承,即一个子类只能继承一个父类,但是一个父类可以被多个子类继承
2. 若子类定义了一个和父类相同名称的属性时,需要使用super.属性名来调用父类属性
3. 若子类定义了一个和父类同名称(返回值类型,方法名,参数列表都相同)
会重写(覆盖)父类的方法;
4. 若子类定义了一个和父类同名称(只是名称相同),会重载该方法;
this关键字和super关键字
1.this关键字是表示本类的
2.super关键字是表示父类的
3.super()父类的构造函数,必须放在子类构造函数的第一句
4.this()子类的构造函数,必须放在子类的构造函数的第一句
下一篇: C++中的代码重用