java中关于继承的总结
java中提供了一个关键字extends
,用这个关键字,可以让一个类继承另一个类。
注意事项
-
java不支持多继承,但支持多重继承。
-
子类只能继承父类的非私有成员。
-
在创建子类时,一定要先将父类创建出来,虚拟机会在子类的构造器第一行默认调用**super()(父类的无参构造器)来创建其父类。当不希望用父类的无参构造器创建时,可以在子类构造器的第一行(必须是第一行)使用super(参数列表)(父类的有参构造器)**来创建父类。
-
第3点注意事项说明,创建一个子类,其祖先类都会被创建出来,这说明其祖先类的所有成员都在内存中存在,虽说子类只能继承其父类的非私有成员,但其私有成员存在于该子类的隐含内存(此为笔者定义名称),称隐含继承。
-
所有类在不显式继承任何类时,默认继承
Object
类。 -
父类的
protected
成员继承到子类,成为子类的成员时,访问权限会变为private
。 -
父类的
default
成员(不加任意修饰符时默认的访问权限)、public
成员,继承到子类,成为子类的成员时,访问权限不变。 -
当子类不满意父类继承来的方法时,可以进行方法重写,重写的方法的
返回类型,参数列表,方法名
与父类方法一致,在重写时,一般在前加@Override
注解。此时若还想使用父类的原方法,可使用super.原方法名(参数列表)
调用。 -
super
关键字代表父类,只能在定义类的内部使用。
注意事项第4点举例:
首先定义一个父类Fu,它有一个私有成员name,和其对应的公开的get,set方法。
package com.gezishan.Extends;
public class Fu {
private String name;
public Fu() {
}
public Fu(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
在同一包内定义一个子类Zi继承Fu类。
package com.gezishan.Extends;
public class Zi extends Fu{
}
在同一包内定义Main类,在Main函数中创建子类。
package com.gezishan;
public class Main {
public static void main(String[] args) {
Zi zi=new Zi();
System.out.println(zi.getname()); //通过公有方法获取name值
zi.setname("格子衫"); //通过公有方法改变name值
}
}
上述例子说明,虽然父类的私有成员不能继承到子类,成为子类的成员,但子类能调用父类遗传来的公有成员方法获取和改变其私有成员,就好像也拥有其私有成员一样。
如有补充或错误,欢迎批评指正!