精华内容
下载资源
问答
  • 原则:当父类仅有带有参数的构造方法时,子类构造方法中必须使用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();,即调用父类的构造器 如果父类没有定义空参的构造器,则必须在子类的构造器的第一行显示的调用super(参数);,以调用父..

    这个是Java的规定:子类继承父类,子类的构造方法必须调用super()即父类的构造方法,而且必须放在构造方法的第一行。

    1、为什么在实例化子类的对象时,会先调用父类的构造器?

    答:子类继承父类后,获取到父类的属性和方法,这些属性和方法在使用前必须先初始化,所以须先调用父类的构造器进行初始化

    2、在哪里调用父类的构造器?

    答:在子类构造器的第一行会隐式的调用 super();,即调用父类的构造器

    如果父类中没有定义空参的构造器,则必须在子类的构造器的第一行显示的调用super(参数); ,以调用父类中构造器

    如果子类中构造器的第一行写了this();,则就隐式的super();会消失,因为super()this()都只能在构造器的第一行定义


    转载:
    Java构造方法之super用法_Java_jcaksonsen的博客-CSDN博客
    Java为什么在实例化子类的对象时,会先调用父类的构造器_Java_万万的学习笔记-CSDN博客

    展开全文
  • ```class Person { //私有属性是不能被继承的 private String name ; private int age;...为什么在子类构造方法中,super(参数 ),可以给子类的变量赋值,super()调用的不是父类的构造方法吗
  • 1、 ...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在构造方法中的含义: 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

     

    展开全文
  • 在子类的构造方法中使用super([参数列表])来调用父类的构造方法,调用父类构造方法的super()要写在子类构造方法中的第一句。如果在子类的构造方法中没有显示的调用父类的构造方法,那么会自动调用父类的空参构造方法...
  • 是不是在子类中的方法都可以使用super来调用父类的同名方法? 不仅仅是构造方法
  • 父类 子类 构造方法

    2016-09-06 13:58:00
    父类 子类 构造方法 摘录 子类不能继承父类的显式定义的构造方法,若想要继承父类的构造方法,需要通过覆盖该构造方法,并在...这时,在子类中显式定义任何构造方法时,可以不用使用super调用父类的...
  • 子类构造方法

    2015-06-05 10:05:00
    在子类构造函数第一行有一个默认的隐式语句。 super(); 子类的实例化过程:子类所有的构造函数默认都会访问父类的空参数的构造... 为什么完成这个必须的动作,就在子类构造函数加入了super()语句。 ...
  • 在子类中应该如何调用父类的构造方法在Java中,子类可以继承父类的非私有成员变量和成员方法(不是以private关键字修饰的)作为自己的成员变量和成员方法。...但是必须在子类构造方法中使用super...
  • 子类构造方法中有一个默认隐含的 super() 来调用父类的构造方法2. 如果创建子类对象的时候想要调用父类的有参构造方法,要使用 super(参数列表)3. super() 的父类构造方法调用,必须放在子类构造方法的第一个语句...
  • ● 把子类传递到父类的有参构造中,然后调用。● 使用反射的方式调用,你使用了反射还有谁不能调用的?!● 父类调用子类的静态方法。案例展示:[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(); //----------...
  • 2.子类必须在构造函数中使用super()来调用父类的构造函数 说明:  1.父类没有写构造函数(系统默认有一个无参构造函数),子类可以不写构造函数(可以理解为:子类的系统默认构造函数,默认调用了super();) ...
  • 由于子类不能继承父类的构造方法,因此,要调用...在类的构造方法中,通过 super 语句调用该类的父类的构造方法。 在子类中访问父类中的成员。 使用 super 调用父类的构造方法 子类可以通过 super 关键字来调用...
  • 在以下情况下需要使用 super 关键字:在类的构造方法中,通过 super 语句调用该类的父类的构造方法。在子类中访问父类中的成员。使用 super 调用父类的构造方法子类可以通过 super 关键字来调用一个由父类定义的...
  • 在子类继承父类时,由于同时会继承到父类的成员变量和成员方法,同时子类也可以定义与父类同名的成员方法来覆盖父类方法。这次问题的起因是做到了一道很懵的选择题,才发现自己对super关键字还没有很理解,查阅资料...
  • 2 子类可以在自己的构造方法中使用super()调用父类的构造方法。 [color=red]使用this()调用本身的另外构造方法[/color] 如果调用suoer,必须写在子类构造方法的第一行 3 如果子类的构造方法中没有显示的调用...
  • 1.子类继承父类的方法属性,并重写父类的方法,子类修饰符不能比父类方法的修饰符的范围狭窄。...继承构造方法的执行顺序:父类有构造函数,子类也写构造方法的时候必须显示的调用父类的构造方
  • Java中super和this关键字的使用

    千次阅读 2019-05-23 14:18:17
    在子类构造方法中使用super()显示调用父类的构造方法, super()必须写在子类构造方法的第一行, 否自编译不通过 B. super() 和 this() 不一定要放在构造方法内的第一行 C. this() 和 super() 可以同时出现在一个构造...
  • B: 通过使用super关键字去显示的调用父类的带参构造方法 C: 子类通过this去调用本类的其他构造方法 子类中一定要有一个构造方法去访问了父类的构造方法,使得父类的数据可以初始化(否则继承有什么意义)。总之一定...
  • Java子类构造方法与多态

    千次阅读 2013-02-15 12:39:15
    (2) 使用super()调用父类的无参构造方法或者super(parameters)调用与参数匹配的父类的构造方法,且super()或者super(parameters)必须出现在子类构造方法第一行,这是显式调用父类构造方法的唯一方式。  public ...
  • 当new出来一个对象的时候, this是指向对象本身. 在存在继承关系时, 在子类中用super表示引用父类中...子类对象可以在构造方法中使用super(argument_list参数列表)调用父类的构造方法 this(argument_list)调用自己...
  • 1.使用super调用父类构造 2.默认会先调用父类构造,然后调用子类构造 3.构造方法不可继承 4.Java只能继承一个父类 5.父类私有属性在子类中不能直接访问 6.继承关系必须是“is-a"的关系
  • 使用super函数----增量重写普通方法和构造方法 在子类中如果重写了超类的方法,通常需要在子类方法中调用超类的同名方法,也就是说,重写超类的方法,实际上应该是一种增量的重写方式,子类方法会在超类的同名...
  • 原因:如果子类对父类的变量和方法进行了重写,你又想再使用父类的方法,这是就需要super来调用,否则默认调用你在子类中重写的变量和方法。 this():调用本类其他重载的构造函数(必须写在函数的第一行) super...
  • 子类不能继承父类的构造器(构造方法或者构造函数),但是父类的构造器带有参数的,则必须在子类的构造器显式地通过super关键字调用父类的构造器并配以适当的参数列表。 如果父类有无参构造器,则在子类的构造器...
  • Java_24 显式调用父类的构造...//在子类中指定调用父类的哪个构造方法,使用super()关键字指定调用父类哪个构造方法 package my; public class _39显式调用父类构造方法_父类有多个构造方法_子类 extends _38...
  • 当父类中只有带参数的构造方法,子类构造方法中就必须第一行手动调用父类带参数的构造方法(super(参数)) * 3.当我们创建构造方法的时候,如果自己不写super(),系统会自动调用 * 原因:父类中也有属性要进行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,241
精华内容 496
关键字:

在子类构造方法中使用super