19章:继承

1.在实例化子类时会默认调用子类的无参构造方法,但是在执行子类构造前,会首先自动实例化父类构造,先对父类的对

象实例化。

 2.调用父类构造函数,可以用super()表示。

例子一
class A{
  public A(){ 
    System.out.println("*****************");
    }
  }

class B extends A{
  public B(){
    super();//表示由子类构造调用父类构造,加不加都可以
    System.out.println("#################");
    }
  }

public class TestJava{
  public static void main(String args[]){//static方法不用实例化类便可以调用                                                                                                                                                                                                            
    B b = new B();   
    }
  }
//也就是证明,在子类的构造中其实一直隐藏着一行super()语句,但是在进行无参父类构造调用的时候
//写上super()是没有意义的,我们往往是在父类没有提供无参构造的时候使用的。

例子二
class A{
  public A(String name){ 
    System.out.println("*****************");
    }
  }

class B extends A{
  public B(String name){
    super(name);
    System.out.println("#################");
    }
  }

public class TestJava{
  public static void main(String args[]){//static方法不用实例化类便可以调用                                                                                                                                                                                                            
    B b = new B("SMITH");   
    }
  }
//所以在大部分情况下,出现super()往往是在需要调用父类有参构造的情况下,在大多数情况下父类一般
//都有无参构造方法,所以子类不会出现super(),而且对super()的调用必须是构造其的第一个语句。

例子三

class B extends A{
  public B(String name){
    System.out.println("#################");
    super(name);  //super()的调用必须是子类构造其的第一个语句
    }
  }

3.分析:关于super()与this()的问题。

            之前学习过this(),表示调用本类的其他构造方法,而现在有了继承关系以后,可以由super()调用父类中指定参数的构造函数。并且这两个语句都一定要出现在首行(意味着不能同时出现这两个语句)

//不让子类的构造器里面调用父类的构造方法,在子类的构造方法出现了this();这样就不会出现super()的
//默认执行
class A{
  public A(){ 
    System.out.println("*****************");
    }
  }

class B extends A{
  public B(){
    this(ss);//这样会导致循环没有一个出口
    };
  public B(String name){
    this();
    System.out.println("#################");
    }
  }

public class TestJava{
  public static void main(String args[]){//static方法不用实例化类便可以调用                                                                                                                                                                                                            
    B b = new B("SMITH");   
    }
  }

4.总结:

(1)继承的唯一好处就是进行了功能的扩充,并且Java只支持单继承局限

   (2)   子类对象实例化时一定要先实例化父类对象,然后再实例化子类自己的对象(因为子类实例化后需要使用父类的属性,父类的属性是在父类实例化后才能使用的。开辟堆栈内存空间。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

icroblog

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值