我们在以前的学习中,我们会了C#中的继承,今天我们来了解了解Java中的继承,其实都大同小异啦!
1.语法
修饰符 SubClass extends SuperClass(){
//类定义部分
}
eg:public Dog extends Pet(){
}
我们说Dog继承了Pet
2.那么Dog究竟可以继承Pet类中的什么东西?
01.当这两个类位于同一个包时,Dog类继承Pet类中Public,protected和默认(friendly)访问级别的成员变量和成员方法。
02.当这两个类位于不同一个包时,Dog类继承Pet类中Public和protected访问级别的成员变量和成员方法。(不能继承默认访问级别的)
03.无法继承private修饰的属性和方法。
04.无法继承父类的构造方法。
3.Java中只支持多继承,即每个类只能有一个直接父类,但它可有多个间接父类
4.方法的重写
在子类中可以根据需求对父类继承的方法进行重新编写,称为方法的重写或方法的覆盖
需求:
01.重写方法和被重写方法必须具有相同的方法名。
02.重写方法和被重写方法必须具有相同的参数列表。
03.重写方法的返回值类型必须和被重写方法的返回值类型相同或是其子类。
04.重写方法不能缩小被重写方法的访问权限。
5.super关键字
super代表对当前对象的之前直接父类对象的默认引用。在子类中可以通过super关键字来访问分类的成员。
注意点:
01.super必须出现在子类(子类的方法和构造方法)中,而不是其他位置。
02.可以访问父类的成员,如父类的属性,方法,构造方法。‘
03.注意访问权限的限制,如无法通过super访问private成员。
6.继承关系中的构造方法
eg:Dog类的构造方法
public Dog(String name,String strain){
super.(name);
this.strain=strain;
}
继承条件下的构造方法的调用规则如下:
01.如果子类的构造方法中没有通过super显示调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用调用父类的无参构造方法。在这种情况下,有没有“super();”语句,效果都说一样的。
02.如果子类的构造方法中通过super显示调用父类的有参构造方法,则将执行父类相应的构造方法,而不执行父类无参构造方法。
03.如果子类的构造方法中通过this显式调用自身的其他构造方法,则在相应构造方法中应用以上两条规则。
04.特别注意的是,如果存在多继承关系,则在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行父类Object类的无参构造方法为止。