继承时类的构造函数?

当一个类继承另一个类的时候,它调用构造函数,一般是先调用被继承那个类的构造函数,如果父类中没有带参数的构造函数的话,子类会调用默认的构造函数;如果你的父类有带参数的构造函数的话,这个带参数的构造函数就会覆盖默认的构造函数,这样,你的子类就必须会去调用带有参数的父类的构造函数

派生类必须调用基类的构造函数,但不继承基类的构造函数,实际上不继承是句废话,因为构造函数不能通过类的实例来调用。任何一个类都有构造函数,如果你不写构造函数,就生成默认的构造函数,如果你写了一个任何形式的构造函数,那么系统都不会为你生成默认构造函数。

构造函数的继承有如下限制:

1子类无条件地继承父类的默认构造函数(即无形参的构造函数)。

2、如果子类定义了自己的构造函数,则子类在创建新对象时,构造函数的执行顺序是:先执行继承自父类的无参构造函数---> 再执行自己的构造函数,即执行了两次;

3如父类没有默认的构造函数,子类也不能定义自己的无参的构造函数对于父类的含参构造函数,子

类可以通过在自己的构造函数中使用super 来显式调用父类的构造函数,但这个调用语句必须是子类构造

函数的第一个可执行语句。

SubClass sc = new SubClass(); BaseClass bc = (BaseClass)sc ;---是正确的
BaseClass bc = new BaseClass(); SubClass sc = (SubClass)bc ;---是错误的
BaseClass bc = new SubClass()
也是正确的,并且在调用bc中的方法时执行的方法体是子类的方法体但该方法必须同时在子类,父类中同时存在,若子类中有,而父类中没有,则不可以这样调用bc.subMethod();

class Base{  

  public void print(){System.out.println("Base");}  

  } 

  public class Derived extends Base{  

  public void  print(){System.out.println("Derived");}

  public static void main(String[]args){

           Base  p=new Derived();  

           p.print();//result is Derived 调用的是子类中的方法

  }  } 

  注意:若两个类都继承于同一个类(必须是直接继承,否则不对),则这两个类可以互相赋值,如:PanelFrame 同继承于Container,所以Panel p = new Frame() ;和Frame f = new Panel()都是正确的

父类:
class  FatherClass{

public int i=0;
    public FatherClass()   {

        System.out.println("FatherClass Create");
   }

public FatherClass(String text)   {

   i=1;
        System.out.println("FatherClass Create");
   }}
子类 :
public class  ChildClass extends FatherClass{
 public ChildClass(
String text)  {//子类的构造函数第一行代码就是调用父类构造函数,如果子类构造函数第一行不是调用父类构造函数,则编译器自动调用父类无参构造函数(这也就是所谓的隐式调用父类构造函数),而如果父类里面没有无参构造函数,所以编译器会报错。解决方法:在父类里添加一个无参构造函数
  System.out.println("ChildClass Create");
 }
 public static void main(String[] args)  {
  FatherClass fc = new FatherClass();
  ChildClass cc = new ChildClass();
 }}
输出结果:
FatherClass Create
FatherClass Create
ChildClass Create

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值