继承时类的构造函数?

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

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

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

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 调用的是子类中的方法

  }  } 

  注意:若两个类都继承于同一个类(必须是直接继承,否则不对),则这两个类可以互相赋值,如:Panel和Frame 同继承于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

展开阅读全文

没有更多推荐了,返回首页