关于构造函数继承的一些问题

原创 2016年06月01日 00:20:45

关于构造函数继承的一些问题

一个父类,包含有参与无参构造函数

public class SuperClass
{
    public SuperClass()
    {
        System.out.println("父类无参构造函数");
    }

    public SuperClass(String arg)
    {
        System.out.println("父类带参构造函数,参数:" + arg);
    }
}

1.子类不定义构造函数,会继承父类所有构造函数吗?

只会继承无参构造函数

public class ClassA extends SuperClass
{
    //不定义构造函数,只继承父类中的无参
}

public static void main(String[] args)
{
    ClassA a = new ClassA();
    //a = new ClassA("ddd"); 编译器报错
}

结果:父类无参构造函数

2.子类定义无参构造函数,调用时会调用父类无参构造函数吗?

不然父类东西谁来初始化

public class ClassB extends SuperClass
{
    public ClassB()
    {
        System.out.println("子类无参构造函数");
    }
}

    public static void main(String[] args)
    {
        ClassB b = new ClassB();
        // b = new ClassB("d"); 同样不定义就没有带参数构造函数
    }

结果:

父类无参构造函数

子类无参构造函数

3.子类只定义带参数构造函数,会调用父类构造函数吗?

会!子类只定义带参数构造函数,就没有子类默认的无参构造函数了,但是仍然会调用父类无参构造函数

public class ClassC extends SuperClass
{
    public ClassC(String arg)
    {
        System.out.println("子类带参数构造函数,参数:" + arg);
    }
}

public static void main(String[] args)
{
    // ClassC c = new ClassC(); 编译器报错
    ClassC c = new ClassC("arg");
}

结果:

父类无参构造函数

子类带参数构造函数,参数:arg

4.子类定义有参与无参构造函数

初始化都会调用父类的无参

public class ClassD extends SuperClass
{
    public ClassD()
    {
        System.out.println("子类无参构造函数");
    }

    public ClassD(String arg)
    {
        System.out.println("子类带参数构造函数,参数:" + arg);
    }
}

public static void main(String[] args)
{
    ClassD d = new ClassD();
    d = new ClassD("arg");
}

结果:

父类无参构造函数

子类无参构造函数

父类无参构造函数

子类带参数构造函数,参数:arg

想要调用父类带参数构造函数怎么办?

用super

public class ClassE extends SuperClass
{
    public ClassE()
    {
        System.out.println("子类无参构造函数");
    }

    public ClassE(String arg)
    {
        super(arg);
        System.out.println("子类带参数构造函数,参数:" + arg);
    }
}

public static void main(String[] args)
{
    ClassE e = new ClassE();
    e = new ClassE("arg");
}

结果:

父类无参构造函数

子类无参构造函数

父类带参构造函数,参数:arg

子类带参数构造函数,参数:arg

C++中继承中遇到的构造函数问题

今天在开发时遇到了一个之前一直以为理所当然的构造函数问题。 先给总结: 子类在构造时,如果没有显式调用父类的构造函数,会先调用父类的默认构造函数(无参数的) 下面给出不同情况的例子 例...
  • hezijian22
  • hezijian22
  • 2014年11月29日 20:43
  • 2396

C#类继承中构造函数用法小结

直接上例子,通过例子来学习知识,是我一贯的做法,呵呵。 //爷爷类 public class GrandfatherClass { public GrandfatherClass() ...
  • tiana0
  • tiana0
  • 2013年09月05日 22:54
  • 12072

Js中的对象、构造函数、原型、原型链及继承

1、对象 在传统的面向过程的程序设计中,会造成函数或变量的冗余。而JS中对象的目的是将所有的具有相同属性或行为的代码整合到一起,形成一个集合,这样就会方便我们管理,例如:   var person1=...
  • tanzhengyu
  • tanzhengyu
  • 2016年03月14日 18:11
  • 2280

派生类构造函数的一些问题

好纠结,书本看完之后发现对构造函数乱了,尤其是带上参数之后就更是乱了,乱的原因就是:对于有参构造函数,如果只要求创建的是该类的一个指针,那么构造函数里那两个参数应该怎么处理呢?举个例子说明一下, A...
  • Nat_myron
  • Nat_myron
  • 2012年11月10日 16:24
  • 459

构造函数和析构函数的一些问题

1、构造函数和析构函数为什么没有返回值? 构造函数和析构函数是两个非常特殊的函数:它们没有返回值.这与返回值为void的函数显然不同.后者虽然也不返回任何值,但还可以让它做点别的事情,而构造函数和析...
  • luxiaoxun
  • luxiaoxun
  • 2012年06月20日 11:37
  • 1343

PHP构造函数的继承问题

关于类继承,总有一个常见的问题,这就是构造函数的使用。子类实例化时会执行父类的构造函数吗?如果是这样,倘若子类也有自己的构造函数会怎么样?子类构造函数在父类构造函数之后执行,还是会覆盖父类的构造函数?...
  • a1141045142
  • a1141045142
  • 2012年10月26日 23:58
  • 232

Java子类和父类的构造函数继承的问题分析

构造方法:方法名和类名相同,属性public,无返回值 构造方法可以多个,以重载的形式出现,对象创建默认以无参的构造函数为入口创建,可以隐藏子类继承父类(super父类接口一定会执行) 若父类只有...
  • yang1464657625
  • yang1464657625
  • 2016年12月06日 11:38
  • 307

C++中继承中遇到的构造函数问题

今天在开发时遇到了一个之前一直以为理所当然的构造函数问题。 先给总结: 子类在构造时,如果没有显式调用父类的构造函数,会先调用父类的默认构造函数(无参数的) 下面给出不同情况的例子 例...
  • hezijian22
  • hezijian22
  • 2014年11月29日 20:43
  • 2396

派生类构造函数和多重继承的二义性问题

一、派生类构造函数的写法(1)冒号前面是派生类构造函数的头部,这和我们以前介绍的构造函数的形式一样,但它的形参列表包括了初始化基类和派生类的成员变量所需的数据;冒号后面是对基类构造函数的调用,这和普通...
  • zhangchen1003
  • zhangchen1003
  • 2015年09月06日 11:55
  • 447

C++ 虚基类问题、继承体系中的构造函数执行过程。(

本篇博客是做了网上的一个题目,然后总结而来的,题目并不难,关键是你能否真正理解其中的过程。   解题思路:   (1)不能简单的认为“先执行基类构造函数,再执行子类构造函数” (2)更本上讲...
  • cnliangmingjun
  • cnliangmingjun
  • 2012年06月29日 11:45
  • 1049
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于构造函数继承的一些问题
举报原因:
原因补充:

(最多只允许输入30个字)