继承中构造方法的注意事项

继承中构造方法的注意事项

  • A:案例演示
    • 父类没有无参构造方法,子类怎么办?
    • super解决
    • this解决
  • B:注意事项
    • super(…)或者this(….)必须出现在构造方法的第一条语句上
    • 两者不可以同时出现在构造方法内,因为都是初始化的作用
    • super()访问父类的方法,this()访问本类的方法

代码如下

public class Demo2_Extends {
   public static void main(String[] args) {
       Son s1 = new Son ();                //1 先执行son空参构造
       System.out.println (s1.getName () + "..." + s1.getAge ());  //5 输出李四...24
       System.out.println ("..................");
       Son s2 = new Son ("张三",23); //1.son有参构造
       System.out.println (s2.getName () + "..." + s2.getAge ());  //5.输出张三...23
   }
}

class father1 {
   private String name;    //姓名
   private int age;        //年龄

 /*  public father1() {										//空参构造     注释掉结果一样
       System.out.println ("father空参构造");
   }*/

   public father1(String name , int age) {     //有参构造
       this.name = name;
       this.age = age;
       System.out.println ("father有参构造");//3 输出   3.输出
   }
   
       public void setName(String name) {						//设置姓名
           this.name = name;
       }

       public String getName() {					//获取姓名
           return name;
       }

       public void setAge(int age) {							//设置年龄
           this.age = age;
       }

       public int getAge() {							//获取年龄
           return age;
       }
   }

class Son extends father1{
   public Son(){								//空参构造
       //super();隐藏起来了
       //super("李四",24);     //2 执行父类有参构造
       this("王五",25);
       System.out.println ("Son 空参构造");    //4 输出son空参构造
   }
   
   public Son(String name,int age){		//有参构造
       //super();隐藏起来了
       super(name,age);    //2.执行父类有参构造
       System.out.println ("Son 有参构造");    //有参构造  4.输出输出son有参构造
   }
}

结果
father有参构造
Son 有参构造
Son 空参构造
王五...25    (this解决的时候)             //李四,24(super解决的时候)
..................
father有参构造
Son 有参构造
张三...23

注:

  • 数字加空格是分割线上部分的执行顺序 ,数字加点是分割线下部分的执行顺序。
  • 父类空参构造注释了之后,构造方法系统默认给的,写了就不给,此时有参构造方法还在,系统就不给了,此时super()调用的是父类的空参构造,而空参构造没有,编译则失败。
    如果将父类的有参构造也注释掉,则编译通过,但这样不好,父类只有一个有参构造,结果注释了,修改了类,实际上别人给的可能是字节码文件,只可以修改自己的类。这个时候就应该在子类中用super(name,age)访问父类的有参。
  • super(“李四”,24)通常不这样写,因为写死了变量,通常是super(name,age)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微莱羽墨

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值