-
什么时候在子类构造方法中必须调用super构造方法?
2021-02-20 08:55:24原则:当父类仅有带有参数的构造方法时,子类的构造方法中必须使用super(参数) super()表示父类的构造方法,子类默认调用父类无参构造方法。 一旦父类仅定义了带参数的构造方法,表示创建父类必须使用带参数构造...原则:当父类仅有带有参数的构造方法时,子类的构造方法中必须使用super(参数)
super()表示父类的构造方法,子类默认调用父类无参构造方法。
一旦父类仅定义了带参数的构造方法,表示创建父类必须使用带参数构造方法,不接受new父类时不带参数,那么此时子类里默认的调用super()就会报错,不带参数的父类构造方法不存在,必须手动加上含有参数的构造方法。
public class practice { public static void main(String[] args) { Sun s =new Sun(); s.show(); } } class Dad{ public int age; Dad(int age) { this.age = age; } void show(){ System.out.println(age); } } class Sun extends Dad{ public int age=10; public Sun() { super(35); } }
如果去掉super将会提示错误信息There is no default constructor available in 'basic.Dad'
-
Java 子类构造方法为什么要super()
2021-01-31 00:09:56这个是Java的规定:子类继承父类,子类的...答:在子类构造器的第一行会隐式的调用super();,即调用父类的构造器 如果父类中没有定义空参的构造器,则必须在子类的构造器的第一行显示的调用super(参数);,以调用父..这个是Java的规定:子类继承父类,子类的构造方法必须调用
super()
即父类的构造方法,而且必须放在构造方法的第一行。1、为什么在实例化子类的对象时,会先调用父类的构造器?
答:子类继承父类后,获取到父类的属性和方法,这些属性和方法在使用前必须先初始化,所以须先调用父类的构造器进行初始化
2、在哪里调用父类的构造器?
答:在子类构造器的第一行会隐式的调用
super()
;,即调用父类的构造器如果父类中没有定义空参的构造器,则必须在子类的构造器的第一行显示的调用
super(参数);
,以调用父类中构造器如果子类中构造器的第一行写了
this();
,则就隐式的super();
会消失,因为super()
和this()
都只能在构造器的第一行定义转载:
Java构造方法之super用法_Java_jcaksonsen的博客-CSDN博客
Java为什么在实例化子类的对象时,会先调用父类的构造器_Java_万万的学习笔记-CSDN博客 -
父类变量私有化后,在子类的构造方法中,为什么使用父类构造方法super(参数),可以给子类对象赋值
2017-12-07 11:15:04```class Person { //私有属性是不能被继承的 private String name ; private int age;...为什么在子类的构造方法中,super(参数 ),可以给子类的变量赋值,super()调用的不是父类的构造方法吗 -
子类的构造方法(与super关键字相结合)
2018-10-17 16:29:131、 ...在calcPerimeter方法中使用的是length与4相乘,而不是width,是因为width是pirvate类型的,length是protected类型的,private只能在其所在的类中使用。 3、实例2: super放在第一行 ...1、
隐式调用:子类构造方法没有显示调用父类构造方法(子类中没有super()),那么父类必须显示提供无参构造方法。
这个时候,系统必须在父类中显示调用无参构造函数。
显示调用:
2、实例1:
在calcPerimeter方法中使用的是length与4相乘,而不是width,是因为width是pirvate类型的,length是protected类型的,private只能在其所在的类中使用。
3、实例2:
super放在第一行
4、实例3:
在new B()的时候,首先要调用父类中无形参构造方法,输出A(),然后才打印B(),在b.f()的时候,因为子类对于父类实现了覆盖,所以输出的是B:f();
如果父类中无形参或者是有形参的构造方法是private类型的话,是无法通过super调用父类构造方法的(因为super关键字不能访问父类中private的成员变量和方法),也就是说无法new出一个对象来。
如果要产生一个继承对象的话,必须先调用父类非private类型的构造方法,然后再用继承对象的构造方法,之后再new出一个对象来。
先调用父类的构造函数(不管是有形参还是无形参),然后再调用子类的构造函数(不管是有形参还是无形参)
super关键字不能访问父类中private的成员变量和方法。
-
关键字super在构造方法中的使用、super操作隐藏的成员变量和方法
2020-02-12 13:59:39关键字super在构造方法中的含义: 1、当用子类的构造方法创建一个对象时,子类的构造方法总是先调用父类的某个构造方法; 2、当子类的构造方法没有明确地指明使用父类的哪个构造方法,那么子类就默认调用父类中不...关键字super在构造方法中的含义:
1、当用子类的构造方法创建一个对象时,子类的构造方法总是先调用父类的某个构造方法;
2、当子类的构造方法没有明确地指明使用父类的哪个构造方法,那么子类就默认调用父类中不带参数的构造方法;
3、需要注意:当某个类中定义了一个或多个构造方法时,那么Java系统就不提供默认的无参数的构造方法了;
如下代码↗:
当子类的构造方法中没有 super() ; 关键字时,系统默认该方法有 super(),此时就调用了父类没有参数的构造方法;
当子类的构造方法中有 super(); 关键字时,系统就调用父类相应参数的构造方法;
//父类 public class superKeyword { //父类的成员变量 int numberFa; //无参数构造方法 superKeyword(){ System.out.println("系统默认调用了父类无参数构造方法 "); } superKeyword(int numberFa){ this.numberFa = numberFa; System.out.println("父类的手机号码: "+numberFa); } }
//父类 public class superKeyword_Test extends superKeyword { //成员变量 int age,number; double Fraction; //没有super();的情况时,系统默认该方法有 super(),此时就调用了父类没有参数的构造方法 superKeyword_Test(int age,int number){ this.age = age; this.number = number; System.out.println("子类的年龄:"+age+" 子类的手机号码: "+number+"\n"); } //有super();的情况时,系统就调用父类相应参数的构造方法 superKeyword_Test(double Fraction, int number) { super(117330111); this.Fraction = Fraction; this.number = number; System.out.println("子类的分数:"+Fraction+" 子类的手机号码: "+number); } public static void main(String[] args){ //调用没有super()的构造方法 superKeyword_Test skt = new superKeyword_Test(18,117120); //调用有super()的构造方法 superKeyword_Test skt1 = new superKeyword_Test(111.11,117110); } }
代码输出结果:
系统默认调用了父类无参数构造方法
子类的年龄:18 子类的手机号码: 117120
父类的手机号码: 117330111
子类的分数:111.11 子类的手机号码: 117110需要注意的是:
当子类构造方法中没有 super() 关键字,而且父类中没有无参数构造方法,却有一个或多个有参数构造方法时,是错误的;
如下代码↗:
//父类 public class superKeyword { //父类的成员变量 int numberFa; superKeyword(int numberFa){ this.numberFa = numberFa; System.out.println("父类的手机号码: "+numberFa); } }
//子类 public class superKeyword_Test extends superKeyword { //成员变量 int age,number; double Fraction; //没有super();的情况时,系统默认该方法有 super(),此时就调用了父类没有参数的构造方法 //当父类中没有无参数构造方法,却有一个或多个有参数构造方法时,是错误的; superKeyword_Test(int age,int number){ this.age = age; this.number = number; System.out.println("子类的年龄:"+age+" 子类的手机号码: "+number+"\n"); } public static void main(String[] args){ //调用没有super()的构造方法 superKeyword_Test skt = new superKeyword_Test(18,117120); } }
代码报错:Implicit super constructor superKeyword() is undefined. Must explicitly invoke another constructor
未定义隐式超级构造函数superKeyword()。必须显式调用另一个构造函数
关键字 super 操作隐藏的成员变量和方法:
1、子类在继承父类的成员变量和方法时,一旦隐藏了父类某个成员变量和方法,那这些成员变量和方法就被分配给关键字 super 所拥有;
2、则子类调用这些被隐藏的成员变量和方法,就需要使用关键字 super 才行;
3、当 super 调用被隐藏的方法时,该方法中出现的成员变量是 被子类隐藏的成员变量 或 继承的成员变量;
如下代码↗:
//父类 public class superKeyword { //声明父类的成员变量和方法 double Fa = 456.456; void methodFa(int x,int y){ Fa = x*y; System.out.println("父类的方法,x*y后 Fa的值="+Fa); } }
//父类 public class superKeyword_Test extends superKeyword { //进行重写,对父类的成员变量和方法进行隐藏 double Fa = 111.111; void methodFa(int x,int y){ Fa = x+y; System.out.println("子类的方法,调用自己的成员变量Fa,x+y后 Fa的值="+Fa); //调用父类被隐藏的成员变量 super.Fa = x-y; System.out.println("子类的方法,通过super调用被隐藏的成员变量Fa,x-y后 Fa的值="+super.Fa); //调用父类被隐藏的方法,此时方法中操作的成员变量是被子类隐藏的成员变量 或 继承的成员变量 super.methodFa(11, 11); } public static void main(String[] args){ //创建对象 superKeyword_Test skt = new superKeyword_Test(); //调用方法 skt.methodFa(100, 10); } }
代码输出结果:
子类的方法,调用自己的成员变量Fa,x+y后 Fa的值=110.0
子类的方法,通过super调用被隐藏的成员变量Fa,x-y后 Fa的值=90.0
父类的方法,x*y后 Fa的值=121.0需要注意的是:
在类主方法 main() 中是不能进行 super.XXX 操作的;
会报错:Cannot use super in a static context ; // 不能在静态上下文中使用super
-
java 子类的构造方法_Java子类的构造方法 学习基础教程
2021-02-28 14:12:36在子类的构造方法中使用super([参数列表])来调用父类的构造方法,调用父类构造方法的super()要写在子类构造方法中的第一句。如果在子类的构造方法中没有显示的调用父类的构造方法,那么会自动调用父类的空参构造方法... -
JAVA 子类方法都可以使用super吗
2015-06-04 13:31:36是不是在子类中的方法都可以使用super来调用父类的同名方法? 不仅仅是构造方法? -
父类 子类 构造方法
2016-09-06 13:58:00父类 子类 构造方法 摘录 子类不能继承父类的显式定义的构造方法,若想要继承父类的构造方法,需要通过覆盖该构造方法,并在...这时,在子类中显式定义任何构造方法时,可以不用使用super调用父类的... -
子类构造方法
2015-06-05 10:05:00在子类的构造函数中第一行有一个默认的隐式语句。 super(); 子类的实例化过程:子类中所有的构造函数默认都会访问父类中的空参数的构造... 为什么完成这个必须的动作,就在子类的构造函数中加入了super()语句。 ... -
python调用父类的构造方法_在子类中应该如何调用父类的构造方法
2020-12-08 08:22:57在子类中应该如何调用父类的构造方法在Java中,子类可以继承父类的非私有成员变量和成员方法(不是以private关键字修饰的)作为自己的成员变量和成员方法。...但是必须在子类的构造方法中使用super... -
Java学习之:继承关系中,父类和子类构造方法的访问特点
2020-12-05 14:58:14子类构造方法中有一个默认隐含的 super() 来调用父类的构造方法2. 如果创建子类对象的时候想要调用父类的有参构造方法,要使用 super(参数列表)3. super() 的父类构造方法调用,必须放在子类构造方法的第一个语句... -
Java 中父类怎么调用子类的方法? 和在子类调用父类的方法super
2018-05-20 01:00:41● 把子类传递到父类的有参构造中,然后调用。● 使用反射的方式调用,你使用了反射还有谁不能调用的?!● 父类调用子类的静态方法。案例展示:[java] view plain copypackage com.ywq; public class Test2{... -
构造方法中super()的作用以及使用
2019-09-19 09:27:39在类的继承中,子类的构造方法中默认会有super()语句存在,相当于执行父类的相应构造方法中的语句 如下面代码: class Extends_Demo { public static void main(String[] args) { Cat c = new Cat(); //----------... -
Java继承-子类默认在构造函数中用super()调用父类构造函数
2017-04-16 12:58:492.子类必须在构造函数中使用super()来调用父类的构造函数 说明: 1.父类没有写构造函数(系统默认有一个无参构造函数),子类可以不写构造函数(可以理解为:子类的系统默认构造函数,默认调用了super();) ... -
Java super关键字:super调用父类的构造方法、利用super访问父类成员
2019-07-07 21:55:39由于子类不能继承父类的构造方法,因此,要调用...在类的构造方法中,通过 super 语句调用该类的父类的构造方法。 在子类中访问父类中的成员。 使用 super 调用父类的构造方法 子类可以通过 super 关键字来调用... -
java调用父类方法 super_Java super关键字:super调用父类的构造方法、利用super访问父类成员...
2021-02-12 22:55:47在以下情况下需要使用 super 关键字:在类的构造方法中,通过 super 语句调用该类的父类的构造方法。在子类中访问父类中的成员。使用 super 调用父类的构造方法子类可以通过 super 关键字来调用一个由父类定义的... -
【Java易混淆知识点】继承时子类super关键字在构造方法中的使用
2019-11-26 23:31:16在子类继承父类时,由于同时会继承到父类的成员变量和成员方法,同时子类也可以定义与父类同名的成员方法来覆盖父类方法。这次问题的起因是做到了一道很懵的选择题,才发现自己对super关键字还没有很理解,查阅资料... -
继承中的构造方法 super
2009-08-04 17:44:232 子类可以在自己的构造方法中使用super()调用父类的构造方法。 [color=red]使用this()调用本身的另外构造方法[/color] 如果调用suoer,必须写在子类构造方法的第一行 3 如果子类的构造方法中没有显示的调用... -
Java继承,子类默认在构造函数中用super()调用父类构造函数
2016-06-02 08:54:571.子类继承父类的方法属性,并重写父类的方法,子类修饰符不能比父类方法的修饰符的范围狭窄。...继承中的构造方法的执行顺序:父类有构造函数,子类也写构造方法的时候必须显示的调用父类的构造方 -
Java中super和this关键字的使用
2019-05-23 14:18:17在子类构造方法中使用super()显示调用父类的构造方法, super()必须写在子类构造方法的第一行, 否自编译不通过 B. super() 和 this() 不一定要放在构造方法内的第一行 C. this() 和 super() 可以同时出现在一个构造... -
如果父类没有无参构造方法,那么子类的构造方法会出现什么现象呢?
2020-07-19 11:14:27B: 通过使用super关键字去显示的调用父类的带参构造方法 C: 子类通过this去调用本类的其他构造方法 子类中一定要有一个构造方法去访问了父类的构造方法,使得父类的数据可以初始化(否则继承有什么意义)。总之一定... -
Java子类的构造方法与多态
2013-02-15 12:39:15(2) 使用super()调用父类的无参构造方法或者super(parameters)调用与参数匹配的父类的构造方法,且super()或者super(parameters)必须出现在子类构造方法第一行,这是显式调用父类构造方法的唯一方式。 public ... -
super用法和继承中的构造方法
2016-12-03 20:34:00当new出来一个对象的时候, this是指向对象本身. 在存在继承关系时, 在子类中用super表示引用父类中...子类对象可以在构造方法中使用super(argument_list参数列表)调用父类的构造方法 this(argument_list)调用自己... -
继承中父类构造和子类构造的关系及注意事项
2020-11-10 12:32:471.使用super调用父类构造 2.默认会先调用父类构造,然后调用子类构造 3.构造方法不可继承 4.Java中只能继承一个父类 5.父类私有属性在子类中不能直接访问 6.继承关系必须是“is-a"的关系 -
使用super函数----增量重写普通方法和构造方法
2019-02-16 16:29:00使用super函数----增量重写普通方法和构造方法 在子类中如果重写了超类的方法,通常需要在子类方法中调用超类的同名方法,也就是说,重写超类的方法,实际上应该是一种增量的重写方式,子类方法会在超类的同名... -
子类继承父类后,可以直接调用父类的变量和方法,那为什么还用...为什么在static方法中不能使用super与this?
2020-07-22 11:35:35原因:如果子类对父类的变量和方法进行了重写,你又想再使用父类的方法,这是就需要super来调用,否则默认调用你在子类中重写的变量和方法。 this():调用本类中其他重载的构造函数(必须写在函数中的第一行) super... -
子类构造器与父类构造器
2017-12-13 20:46:00子类不能继承父类的构造器(构造方法或者构造函数),但是父类的构造器带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。 如果父类有无参构造器,则在子类的构造器... -
Java_25 显式调用父类的构造方法_父类中有多个调用方法_子类(02)
2020-04-23 14:35:04Java_24 显式调用父类的构造...//在子类中指定调用父类中的哪个构造方法,使用super()关键字指定调用父类中哪个构造方法 package my; public class _39显式调用父类构造方法_父类中有多个构造方法_子类 extends _38... -
Java 继承中构造方法的使用
2019-08-22 10:21:38当父类中只有带参数的构造方法,子类的构造方法中就必须在第一行手动调用父类带参数的构造方法(super(参数)) * 3.当我们创建构造方法的时候,如果自己不写super(),系统会自动调用 * 原因:父类中也有属性要进行...