Java 继承的一些重点

  • 子类在实例化的时候都会调用父类的构造方法
class Outer{ //父类

public Outer(){

System.out.println("父类的构造方法");

}

}

class Inner extends Outer{

public Inner(){

//super(); //子类会自动调用父类的构造方法

System.out.println("子类的构造方法");

}

}

 

class ListSetMap {

public static void main(String[] args) {

new Inner();

}

}

父类的构造方法

子类的构造方法

  • 子类覆写的方法的访问权限不能比父类的严格
class Outer{

public Outer(){

System.out.println("父类的构造方法");

}

public void fun(){

}

}

class Inner extends Outer{

public Inner(){

super();

System.out.println("子类的构造方法");

}

default void fun(){ //此处缩小了权限

}

}

 

class ListSetMap {

public static void main(String[] args) {

new Inner();

}

}

 

结果报错

---------- 编译javac ----------

ListSetMap.java:13: 错误: 此处不允许使用修饰符default

default void fun(){

^

1 个错误

 

所以子类覆写的方法不能小于父类的权限

 

  • 父类为  private的方法由子类用 default的方法不叫覆写
class Outer{

private void fun(){ //private权限

System.out.println("父类");

}

public void list(){ //调用方法来访问fun()

this.fun();

}

}

class Inner extends Outer{

 

public void fun(){ //子类扩大权限

System.out.println("子类");

}

}

 

class ListSetMap {

public static void main(String[] args) {

new Inner().list();

}

}

输出的结果

父类

也就是说此时子类并没有覆写父类的fun方法

这类似于属性的覆盖

class Outer{

public String name="我";

}

class Inner extends Outer{

public String name="你";

public void fun(){

System.out.println(super.name);

System.out.println(this.name);

}

}

 

class ListSetMap {

public static void main(String[] args) {

new Inner().fun();

}

}

输出结果

     //父类的name

  • 父类的属性可以被子类的同名属性覆盖——属性的覆盖

然而父类的属性并没有被子类重新定义的属性说覆盖,也就跟上面所说的方法一样。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值