2 qq 33720032 qq_33720032 于 2016.02.03 21:27 提问

java子父类构造方法参数

子类构造方法参数一定要和父类构造方法参数相同吗,子父类构造方法参数有什么关系

9个回答

caozhy
caozhy   Ds   Rxr 2016.02.03 21:43
已采纳
 class A
{
    public A(int a) { }
}
class B extends A
{
    public B(int b) { }
}

这不行,因为A没有无参数构造函数。派生类需要指定:

 class A
{
    public A(int a) { }
}
class B extends A
{
    public B(int b) { super(b); }
}

这样就可以

caozhy
caozhy   Ds   Rxr 2016.02.03 21:32

当然不需要了。当父类没有无参数构造函数的时候,派生类构造函数必须用super(参数列表) 指明自己调用哪个基类的构造函数。
但是派生类构造函数的参数可以不同(一般派生类的参数会更多,或者包含初始化自己特有变量的参数)

caozhy
caozhy   Ds   Rxr 2016.02.03 21:41
 举例:
class A
{

}
class B extends A
{
    public B(int b) { }
}

以上代码可以编译,B显然有一个有参数构造函数,A没有。这没问题
caozhy
caozhy   Ds   Rxr 2016.02.03 21:43
 class A
{
    public A(int a) { }
}
class B extends A
{
    public B(int b, int c) { super(b); }
}

再给B增加一点参数,这样也可以

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.03 22:06

子类构造函数的参数跟父类构造函数的参数当然可以不一致了,因为子类继承自父类,可以有自己特有、而父类没有的一些属性。
子类编写构造函数的时候,需要注意的是,如果父类也提供了有参构造函数,那么第一步一定是先调用父类的有参构造函数。
所以子类构造函数的参数列表一定是包含父类有参构造函数列表。例如子类参数集合为A,父类参数集合为B,那么必须A>=B。

a774057695
a774057695   2016.02.03 23:01

当然是不一定的,我们抛开代码实现上的东西谈一下,子类是父类中更具体的一部分,而构造函数的参数是干什么的?初始化成员变量(可以理解为属性,特征),那么子类是否具有父类的属性、特征呢?当然有,而且应该具有更多的属性、特征。构造器(构造函数)的本质是创建一个内存对象,如果有必要,可以继续为该类对象初始化部分成员变量。

paopaoTT
paopaoTT   2016.02.04 19:53

这个是没必要相同的。那只不过是一种依赖而已

91program
91program   Ds   Rxr 2016.02.03 21:36

是没有必要。
在初始化子类时,会调用父类,没有参数上的依赖性。参数的多与少,都是可以的。

91program
91program   Ds   Rxr 2016.02.03 21:36

是没有必要。
在初始化子类时,会调用父类,没有参数上的依赖性。参数的多与少,都是可以的。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
JAVA子父类中构造函数的特点-子类实例化过程
//仅作为学习笔记 /* 子父类中的构造函数 在对子类对象进行初始化时,父类的构造函数也会运行 那是因为子类的构造函数默认的第一行有一句隐式的语句super() super():会访问父类中空参数的构造函数,而且子类中所有的构造函数默认的第一行都是super() 为什么子类一定要访问父类中的构造函数? 因为父类中的数据子类可以直接获取,所以子类对象在建立时=,需要查看父类是如何对
一个java文件中子类与父类构造方法执行顺序
1.只存在一个public;2.若main函数不在于文件名相同的类下面,则run as 不会出现Java Application;3.默认会调用系统无参构造方法;4.this()与super()只能在一个方法中存在一个package com.web.test2;public class Creature { public Creature(){ System.out.printl
子类构造函数参数列表,子类向父类传参数
#include "stdafx.h" #include #include #include using namespace std; class animal { public: animal(int height, int weight) { cout } }; class fish :public animal { public: fi
Java子父类间静态代码块、构造代码块、构造方法的执行顺序
先看一段测试
Java中子类和父类的构造函数?
这篇文章总结了关于Java构造的常见​​问题。 1)为什么创建一个子类对象要也需要调用父类的构造函数? class Super { String s; public Super(){ System.out.println("Super"); } } public class Sub extends Super { public Sub(){
Java 子类构造对象
package day09; /** * 在子类构造对象时,发现,访问子类构造函数时,父类也运行了。 * 为什么呢? * 原因是:在子类的构造函数中第一行有一个默认的隐士语句。super() * 子类的实例化过程:子类中所有的构造函数默认都会访问父类中的空参数的构造函数。 *  * 为什么子类实例化的时候要访问父类中的构造函数呢? * 那是因为子类继承了父类,获取到了父类中的内
Java子类构造函数中默认调用父类的空参构造函数
测试代码如下: 父类: public class ParentTest { public ParentTest(){ System.out.println(1); } public ParentTest(String name){ System.out.println(2); } } 子类: public class ChildTest extends Par
子类与父类构造器关系
父类:Base   子类:Driver 1.子父类都是默认构造器: 父类: 子类: 运行结果: 分析: 如果父类base   class只有缺省构造函数,也就是编译器自动为你产生的,而子类中也只有缺省构造函数,那么不会产生任何问题。 因为当你试图产生一个子类的实例时,首先要执行子类的构造函数,但是由于子类继承父类,所以子类的缺省构造函数自
【继承】----子父类中的构造函数,子类的实例化过程内存图解
继承—子父类中的构造函数,子类的实例化过程 源代码: classFu { Fu() { super(); show(); return; } void show()//普通方法 { System.out.println("fu show"); } } classZ
子父类中构造函数的特点
1.在对子类对象进行初始化时,父类的构造函数也会运行。因为子类的构造函数默认第一行有一条隐式的语句super()。 super():会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super();   2.子类之所以要访问父类中的构造函数,是因为父类中的数据子类可以直接获取。所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的。所以子类在对象初始化