-
2021-02-13 01:44:43
在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的?
答案如下:
当你new一个子类对象的时候,必须首先要new一个父类的对像出来,这个父类对象位于子类对象的内部,所以说,子类对象比父类对象大,子类对象里面包含了一个父类的对象,这是内存中真实的情况.构造方法是new一个对象的时候,必须要调的方法,这是规定,要new父类对象出来,那么肯定要调用其构造方法,所以:
第一个规则:子类的构造过程中,必须调用其父类的构造方法。一个类,如果我们不写构造方法,那么编译器会帮我们加上一个默认的构造方法,所谓默认的构造方法,就是没有参数的构造方法,但是如果你自己写了构造方法,那么编译器就不会给你添加了,所以有时候当你new一个子类对象的时候,肯定调用了子类的构造方法,但是在子类构造方法中我们并没有显示的调用基类的构造方法,就是没写,如:super(); 并没有这样写,但是这样就会调用父类没有参数的构造方法,如果父类中没有没有参数的构造方法就会出错。
第二个规则:如果子类的构造方法中没有显示的调用基类构造方法,则系统默认调用基类无参数的构造方法注意:如果子类的构造方法中既没有显示的调用基类构造方法,而基类中又没有默认无参的构造方法,则编译出错,所以,通常我们需要显示的:super(参数列表),来调用父类有参数的构造函数。
1 //当你没有使用父类默认的构造方法时,此时在子类的构造方法中就需要显示的调用父类定义的构造方法。
2 classAnimal{3 privateString name;4
5 //如果你定义一个新的构造方法
6 publicAnimal(String name) {7 this.name =name;8 }9 }10
11 public Dog extendsAnimal{12
13 //这时你就要显示的调用父类的构造方法,因为子类默认调用的是父类的14 //无参构造方法Animal()
15 publicDog(){16 super("小狗"); //显示调用父类的有参构造方法
17
18 .... //子类的构造方法处理
19 }20 }21
22 //当然,如果你在父类里面把无参的构造方法,显示的写出来了,比如:
23 classAnimal{24 privateString name;25
26 //无参的构造方法
27 publicAnimal() {28 ..... //处理
29 }30
31 /*
32 如果你定义一个新的构造方法,那么在子类的构造方法中,就可以不用显示的调用父类的构造方法,因为子类有个无参的构造方法,33 子类在构造方法中会自动调用父类已经定义的无参构造方法。34 */
35 publicAnimal(String name) {36 this.name =name;37 }38 }
总结:不过一般的,在父类中使用了构造方法的重载,在子类中就可以根据需要,调用相应的父类构造方法。
更多相关内容 -
Java中构造方法调用构造方法??
2021-02-12 13:19:58心有猛虎_细嗅蔷薇正确的调用方法应该是直接一个this()来调用构造方法。请看代码:classStudent{Stringid;Stringname;Stringsex;//创建构造方法publicStudent(Stringid,Stringname,StringclassNum,Stringsex,intage){...心有猛虎_细嗅蔷薇
正确的调用方法应该是直接一个this()来调用构造方法。请看代码:class Student{
String id;
String name;
String sex;
//创建构造方法
public Student(String id,String name,String classNum,String sex,int age){
this(id,name,classNum,sex);
this.age = age;
}
//重载构造方法,有两个参数
public Student(String id,String name){
this.name = name;
this.id =id;
}
//重载构造方法,有3个参数
public Student(String id,String name,String sex){
this(id,name); //在三个个参数的构造方法里面调用两个参数的构造方法 this(id,name)
this.sex = sex; // 在添加另一个参数,实现构造方法调用构造方法
}
public static void main(String[] args) {
}
}
-
在Java中下面关于构造方法说法错误的是() (选择二项)
2021-03-16 18:52:13【多选题】在Java中下面关于构造方法说法错误的是() 【单选题】以下关于E-mail营销表述正确的是 【判断题】《通用硅酸盐水泥》中普通硅酸盐水泥的强度等级包括:32.5、32.5R、42.5、42.5R、52.5、52.5R六个强度等级...【多选题】我国现行规范要求硅酸盐水泥的物理力学性能指标有( )。
【多选题】在网络营销战略中降低营销成本费用的措施
【单选题】在体内合成嘌呤核苷酸时 , 嘌呤环上 N 1 来自
【单选题】催化三羧酸循环与脂酸 β- 氧化的酶分布在细胞的()
【单选题】产品的外观式样、功能、款式、特色、包装、商标、质量行内容属于是网络营销产品整体概念的
【单选题】( )属于营销宏观环境。
【多选题】营销宏观环境是指影响微观环境的一系列巨大的社会力量。主要包括
【判断题】砂浆试块制作后,一般在标准温度、湿度环境中养护 24小时 ,当气温较低时适当延长时间,但不能超过48小时 ,然后对试块进行编号并拆模。
【单选题】糖酵解、糖异生、磷酸戊糖途径、糖原合成及糖原分解各条代谢途径交叉点上的物质是( )
【判断题】自我介绍的时间要简短,愈短愈好。
【单选题】接口中可以存在已实现的方法
【单选题】在体内嘧啶核苷酸合成时 , 嘧啶环中 N 1 和 N 3 分别来自
【单选题】在嘧啶核苷酸合成中 , 向嘧啶环提供 N 1 原子的化合物是
【判断题】测定水泥的安定性方法为试饼法、雷氏法两种,试饼法可做为有争议时判定试验。
【单选题】启动多线程必须调用start()方法, 如果调用run方法则没有启动新的线程
【单选题】run方法是运行线程的主体,若run方法运行结束,线程就消亡了。
【多选题】(多选)给定Java代码,如下: abstract class Shape{ abstract void draw() ; } 要创建Shape类的子类Circle,以下代码正确的是()
【单选题】在体内嘌呤核苷酸合成时 , CO 2 中碳原子进入嘌呤环中的 部位是
【单选题】短期饥饿时,体内能量的主要来源是()
【判断题】水泥胶砂3天强度试验应在72h±1h时间里进行。
【多选题】在Java中下面关于构造方法说法错误的是() (选择二项)
【单选题】体内合成脱氧核糖核苷时生成 dTMP 的直接前体是
【单选题】多个购买者联合购买同一类商品而形成一定购买规模,以获得优惠售价的交易方式是
【单选题】在目前市场竞争很激烈的条件下,生产企业最应具有的营销观念是 。
【单选题】在java中,已定义两个接口B和C,要定义一个实现这两个接口的类,以下语句正确的是( ) 。(选择一项)
【单选题】生物体内物质代谢调节的基础是:
【单选题】现在有一个接口iPerson与一个类Chinese,Chinese试图实现iPerson接口, 如下项目中哪个是正确的写法( )
【判断题】漂浮广告又称为弹出式广告。
【单选题】消费者在购买产品后需要得到的附加服务或利益,主要是帮助用户更好地使用核心利益的服务是网络营销产品整体概念的
【单选题】产品组合策略中,扩展产品组合的广度和深度,增加产品系列或项目,扩大经营满园,以满足市场需要的策略是
【多选题】所谓着装的TPO原则,要求人们在着装时要以( )三项因素为依据,不同的环境需要有与之相协调的服饰。
【单选题】IPv4 版本的因特网总共有 ________ 个 A 类地址网络。
【单选题】痛风患者血液中含量增加的物质是
【单选题】标准站姿应是( )。
【单选题】当肝细胞内 ATP 供应充分时,下列叙述哪一项是错误的()
【单选题】嘧啶碱合成过程的重要中间产物是
【单选题】Java application中的主类需包含main方法,以下哪项是main方法的正确形参?
【单选题】给定如下java代码,编译运行之后,将会输出()。 public class Test{ public static void main(String args[]){ int a=5; System.out.println(a%2==1) ?(a+1) /2:a/2) ; } } (选择一项)
【判断题】信息加工处理是一个信息的再创造过程。
【单选题】在Java中,下面关于变量及其作用域的描述错误的是()。
【判断题】网络营销不是手段而是目的。
【单选题】在一个主机域名 http://www.pku.edu.cn 中, ( ) 表示主机名。
【多选题】在Java中下面关于构造方法说法错误的是()
【单选题】以下关于E-mail营销表述正确的是
【判断题】《通用硅酸盐水泥》中普通硅酸盐水泥的强度等级包括:32.5、32.5R、42.5、42.5R、52.5、52.5R六个强度等级。
【多选题】既涉及细胞质又涉及线粒体的代谢过程有:
【单选题】西方人很重视礼物的包装,并且必须在什么时候打开礼物( )。
【单选题】5-氟尿嘧啶的抗癌作用机理是:
【单选题】java程序中,main方法的格式正确的是()
【单选题】在细胞质内进行的代谢途径有()
-
JAVA子类调用父类构造方法
2021-03-06 16:59:23父类的构造方法不能被子类继承。以下语句中MyException类继承了java.lang.Exception类。public class MyException extends Exception{} //MyException类只有一个隐含的默认构造方法尽管在Exception类中定义了如下...父类的构造方法不能被子类继承。以下语句中MyException类继承了java.lang.Exception类。
public class MyException extends Exception{} //
MyException类只有一个隐含的默认构造方法
尽管在Exception类中定义了如下形式的构造方法:
public Exception(String msg)
但MyException类不会继承以上Exception类的构造方法,因此以下代码是不合法的。
//编译出错,MyException类不存在这样的构造方法
Exception e=new MyException("Something is error");
在子类的构造方法中,可以通过super语句调用父类的构造方法。例如:
public class MyException extends Exception{
public MyException(){
//调用Exception父类的Exception(String msg)构造方法
super("Something is error");
}
public MyException(String msg){
//调用Exception父类的Exception(String msg)构造方法
super(msg);
}
}
用super语句来调用父类的构造方法时,必须遵守以下语法规则。
l
在子类的构造方法中,不能直接通过父类方法名调用父类的构造方法,而是要使用super语句,以下代码是非法的:
public MyException(String msg){
Exception(msg); //编译错误
}
l
假如在子类的构造方法中有super语句,它必须作为构造方法的第一条语句,以下代码是非法的:
public MyException(){
String msg= "Something wrong";
super(msg); //编译错误,super语句必须作为构造方法的第一条语句
}
在创建子类的对象时,Java虚拟机首先执行父类的构造方法,然后再执行子类的构造方法。在多级继承的情况下,将从继承树的最上层的父类开始,依次执行各个类的构造方法,这可以保证子类对象从所有直接或间接父类中继承的实例变量都被正确地初始化。例如以下父类Base和子类Sub分别有一个实例变量a和b,当构造Sub实例时,这两个实例变量都会被初始化。
public class Base{
private int a;
public Base(int a){ this.a=a;}
public int getA(){return a;}
}
public class Sub extends Base{
private int b;
public Sub(int a,int b){super(a); this.b=b;}
public int getB(){return b;}
public static void main(String args[]){
Sub sub=new Sub(1,2);
System.out.println("a="+sub.getA()+" b="+sub.getB()); //打印a=1
b=2
}
}
在例程11-3(Son.java)中,Son类继承Father类,Father类继承Grandpa类。这3个类都显式定义了默认的构造方法,此外还定义了一个带参数的构造方法。
例程11-3 Son.java
class Grandpa{
protected Grandpa(){
System.out.println("default Grandpa");
}
public Grandpa(String name){
System.out.println(name);
}
}
class Father extends Grandpa{
protected Father(){
System.out.println("default Father");
}
public Father(String grandpaName,String fatherName){
super(grandpaName);
System.out.println(fatherName);
}
}
public class Son extends Father{
public Son(){
System.out.println("default Son");
}
public Son(String grandpaName,String fatherName,String
sonName){
super(grandpaName,fatherName);
System.out.println(sonName);
}
public static void main(String args[]){
Son s1= new Son("My Grandpa", "My Father", "My Son"); //①
Son s2=new Son(); //②
}
}
执行以上main()方法的第①条语句,打印结果如下:
My Grandpa
My Father
My Son
此时构造方法的执行顺序如图11-1所示。
如果子类的构造方法没有用super语句显式调用父类的构造方法,那么通过这个构造方法创建子类对象时,Java虚拟机会自动先调用父类的默认构造方法。执行以上Son类的main()方法的第②条语句,打印结果如下:
default Grandpa
default Father
default Son
-
Java中如何在无参构造方法中调用有参构造?
2021-02-28 08:50:22展开全部一般正常的都是参数多的调用参数少的。有参数的调用无参数的居e68a843231313335323631343130323136353331333365643537多。当然你要无参调用的参的也可以。你用无参,调用有参的。那你有参的参数你需要怎么传... -
下列关于Java中类的构造方法的描述,正确的是()
2021-03-14 18:56:08如果不小心给构造函数前面添加了返回值类型,那么这将使这个构造函数变成一个普通的方法,在运行时将产生找不到构造方法的错误。C:super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。 this... -
Java子类创建对象时构造方法调用的分析
2022-03-13 15:13:47) 创建子类对象时会先调用子类的构造方法,但不会执行其内容,紧接着执行父类的构造方法,但也不会执行父类的构造方法内容,而是对父类的属性进行初始化,然后... -
java – 为什么从构造函数中调用方法被认为是不好的做法?
2021-03-16 16:22:32首先,一般来说,在构造函数中调用方法没有问题.这些问题特别针对调用构造函数类的可覆盖方法的特定情况,以及将对象的this引用传递给其他对象的方法(包括构造函数).避免可覆盖方法和“泄漏”的原因可能很复杂,但它们... -
题目:关于构造方法,下面说法正确的是()
2020-05-16 22:20:30题目:关于构造方法,下面说法正确的是() A、每个类都有至少一个构造方法 B、一个类中可以有多个构造方法 C、构造方法可以有返回值 D、构造方法可以有多个参数 结果:A、B、D 解释: A:即使类中没有定义构造方法... -
python3 调用父类构造方法, 以及调用普通方法的思考
2019-09-03 14:42:28最近看一些 代码,产生 一些困惑 , 关于python中的调用父类的方法以及 构造方法,有的方法 直接用类去调用. 我不是很理解 这种写法, 一段代码引发的思考 下面是我看 WSGIServer 代码的时候,有一点疑惑 . server_... -
java子类调用父类的构造方法
2021-04-16 16:45:12class FatherClass{ public FatherClass(){ System.out.println("父类 无参 构造函数"); } public FatherClass(int i){ System.out.println("父类 一个参数构造函数... -
题目:下列关于构造方法的叙述中,错误的是( )。
2020-05-19 10:26:27题目:下列关于构造方法的叙述中,错误的是( ) A.Java语言规定构造方法名与类名必须相同 B.Java语言规定构造方法没有返回值,但不用void声明 C.Java语言规定构造方法不可以重载 D.Java语言规定构造方法只能通过... -
在java中可以直接从方法调用构造函数吗?
2021-03-05 16:33:53构造函数类似于方法,它在创建类的对象时被调用,通常用于初始化类的实例变量。构造函数与它们的类同名,并且没有返回类型。...从方法调用构造函数不,不能从方法调用构造函数。唯一可以使用“this... -
java子类调用父类构造方法
2021-04-20 10:00:52java子类调用父类构造方法 来源:https://www.cnblogs.com/sunnychuh/archive/2011/09/09/2172131.html(本人用来方便查看笔记,不用于其他任何用途) java继承中对构造函数是不继承的,只是调用(隐式或显式)。 ... -
关于子类调用父类构造方法的问题
2018-03-29 22:01:04昨天班级有一个小测验,结果自己觉得还不错的错了好几道题...1.子类会默认调用父类的无参构造方法举例来看:public class Derived extends Base { public Derived (String s) { System.out.println("这是子类的... -
为什么子类的构造方法一定会调用父类的某个构造方法
2017-07-01 11:02:27首先我们要知道构造方法是类的一个特殊成员,它会在类实例化对象时被自动调用 子类中,它在调用父类中空参数的构造函数。因为子类继承父类,会继承到父类中的数据,所以必须要看父类是如何对自己的数据进行初始化的... -
构造子类对象时构造方法的调用顺序
2020-05-04 16:34:56Java构造子类对象时构造方法的调用顺序 子类构造对象时,首先调用超类的构造方法,所以首先被执行的是最远超类的构造方法! 举个例子吧: package gl2; public class Person { public int age; public String name... -
java中子类调用父类构造方法,注意事项
2020-04-10 18:37:05继承有个特点,就是子类无法访问父类的private字段或者private方法。例如,Student类就无法访问Person类的name和age字段: class Person { private String name; private int age; } class Student extends ... -
什么时候在子类构造方法中必须调用super构造方法?
2021-02-20 08:55:24一旦父类仅定义了带参数的构造方法,表示创建父类必须使用带参数构造方法,不接受new父类时不带参数,那么此时子类里默认的调用super()就会报错,必须手动加上含有参数的构造方法。 public class practice { ... -
java super关键字,super调用父类构造方法详解
2021-03-06 23:39:54因为子类不可以继承父类的构造方法,所以,想要调用父类的构造方法的话,那么就可以使用得到super关键字下面的话就来对这个方面做一下详细的讲解。super关键字能够用来访问父类的构造方法、普通方法和属性。super... -
实例化子类对象时调用的构造方法
2022-03-12 12:01:58如果子类也写了一个构造方法,实例化对象时就不会调用父类的构造方法,因为Python的构造方法固定时_init_(),子类自己写了构造方法相当于重写了父类的构造方法,会将父类的构造方法覆盖! Java也类似 ... -
【C#面向对象】第五课——类的继承、调用父类的构造方法、继承的特性
2020-07-08 17:54:26知识点:理解继承的概念 、 掌握在程序中实现继承、 掌握 base 和 protected 关键字 、掌握如何调用父类构造方法 、 掌握继承的特性 1、理解继承 面向对象有三大特性:封装、继承和多态。我们学习过封装,封装... -
java之子类继承抽象类,子类构造器调用抽象类构造器问题
2021-02-13 02:10:50解释2: 抽象类中的构造方法其实是用来给继承的子类来用的,因为构造方法相当于初始化方法,当子类调用构造方法时必须调用父类构造方法,所以你可以在子类产生对象 时抽象类中按需求初始化抽象类中的字段以及执行... -
Java构造函数的相互调用代码示例
2021-02-25 19:24:00在Java中,当为一个类创建了多个构造函数时,有时想在一个构造函数中调用另一个构造函数以减少代码量。这时可以使用this关键字来实现。有关构造函数的相关内容,大家可以参阅:Java编程中的构造函数详细介绍通常,当... -
Java中子类调用父类构造方法目的、排错
2021-04-19 18:38:33因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用 super() 来调用父类中特定的构造方法,则编译时将发生错误,因为 Java 程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类... -
【Java】关于构造方法的说法哪个正确?
2019-11-09 10:38:45关于构造方法的说法哪个正确? A、一个类只能有一个构造方法 B、一个类可以有多个不同名的构造方法 C、构造方法与类同名 D、构造方法必须自己定义,不能使用父类的构造方法 答: 正确答案:C 答案解析: A,构造... -
构造方法的定义语法与调用时机
2018-11-18 11:29:48为了使程序可以被安全地初始化,C++引入了构造器(也可以成为构造方法)的概念,这是一个在创建对象时被自动调用的特殊方法。Java中也采用了构造器,并且提供了“垃圾回收器”。对于不在使用的内存资源,垃圾回收器... -
[转载] Java基础之构造方法(函数)何时被调用
2020-12-23 10:04:49构造方法何时被调用 ( ) A.类定义时 B.创建对象时 C.调用对象方法时 D.使用对象的变量时 正确答案 B 答案解析 其是应该说是实例化对象时被调用,一个类的创建会默认有一个无参构造方法,当你实例化的时候...