精华内容
下载资源
问答
  • 构造方法中super()的作用以及使用

    千次阅读 2019-09-19 09:27:39
    类的继承,子类的构造方法中默认会有super()语句存在,相当于执行父类的相应构造方法中语句 下面代码: class Extends_Demo { public static void main(String[] args) { Cat c = new Cat(); //----------...

    在类的继承中,子类的构造方法中默认会有super()语句存在,相当于执行父类的相应构造方法中的语句
    如下面代码:

    class Extends_Demo {
        public static void main(String[] args) {
            Cat c = new Cat();            //---------------(1)
            System.out.println("-------------------");
            Cat c1 = new Cat("花花",4);   //----------------(2)
        }
    }
    class Animal {
        private String color;
        private int foot;
    
        public Animal(){
            System.out.println("我是父类无参数构造器");
        }
    
        public Animal(String color,int foot){
            System.out.println("我是父类有参数构造器");
            this.color = color;
            this.foot  = foot;
        }
    }
    class Cat extends Animal{
    
        public Cat(){
            super();                     //---------------可以省略
            System.out.println("我是子类无参数构造器");
        }
    
        public Cat(String color,int foot){              
            //super(color,foot);         //---------------(3)
            super();                     //---------------可以省略
            System.out.println("我是子类有参数构造器");
        }
    }
    

    输出
    这里写图片描述

    在这里插入图片描述
    main方法中
    (1)语句执行的是子类的无参数构造方法,内部默认有super(),代表执行父类无参数构造方法,因此输出父类无参数构造方法中的语句和子类无参数构造方法中的语句;
    (2)语句执行的是子类有参数构造方法,内部也是默认有super(),代表执行父类无参数构造方法,,输出语句是父类无参数构造方法中的语句和子类有参数构造方法中的语句;
    若将(3)语句解除屏蔽,则子类有参构造方法中执行super(color,foot)表示执行父类有参构造方法Animal(color,foot),修改后子类:

    class Cat extends Animal{
    
        public Cat(){
            super();                    //----------------可以省略
            System.out.println("我是子类无参数构造器");
        }
    
        public Cat(String color,int foot){              
            super(color,foot);         //---------------(3)
            //super();
            System.out.println("我是子类有参数构造器");
        }
    }
    

    输出

    在这里插入图片描述

    对比后可以知道,super()代表执行父类无参数构造方法内容,super(color,foot)代表执行父类有参数构造方法。

    Java this()和super()的使用注意

    使用super和this应该注意这些:
    1)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
    2)super()和this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法。
    3)super()和this()均需放在构造方法内第一行。
    4)尽管可以用this调用一个构造器,但却不能调用两个。
    5)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
    6)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
    7)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。

    为什么this或者super要放到第一行?
    this() super()是你如果想用传入当前构造器中的参数或者构造器中的数据调用其他构造器或者控制父类构造器时使用的,在一个构造器中你只能使用this()或者super()之中的一个,而且调用的位置只能在构造器的第一行,在子类中如果你希望调用父类的构造器来初始化父类的部分,那就用合适的参数来调用super(),如果你用没有参数的super()来调用父类的构造器(同时也没有使用this()来调用其他构造器),父类缺省的构造器会被调用,如果父类没有缺省的构造器,那编译器就会报一个错误。

    详细讲解见链接:https://www.jb51.net/article/110674.htm

    展开全文
  • 如果构造方法中包含super(…)或this(…)调用,那么它们只能作为该构造方法的第一条语句,也就是说连try…catch都不可以有
    如果构造方法中包含super(…)或this(…)调用,那么它们只能作为该构造方法的第一条语句,也就是说连try…catch都不可以有
    展开全文
  • JAVA—继承构造方法的访问特点(super调用父类构造方法怎么调?super和this的区别) 1.子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行子类构造;如下例子 父类: public ...

    JAVA—继承构造方法的访问特点(super调用父类构造方法怎么调?super和this的区别)

    1.子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行子类构造;如下例子

    父类:
    public class Fu {
        public Fu(){
            System.out.println("父类构造方法");
        }
    }
    
    子类:
    public class ZI extends Fu{
        public ZI(){
            System.out.println("子类构造方法");
        }
    }
    
    main方法:调用的是子类的构造,没有写super(),默认”赠送“,所以先调用父类构造,再调用子类构造
    public class Demo01 {
        public static void main(String[] args) {
            //super()             不屑会默认"赠送"
            ZI zi = new ZI();
        }
    }
    

    2.可以通过super关键字来子类构造调用父类重载构造(这时候不会再“赠送”super();例如:

    父类:
    public class Fu {
    
        public Fu(int num){
            System.out.println("父类重载构造");
        }
    
        public Fu(){
            System.out.println("父类构造方法");
        }
    }
    
    子类:
    public class ZI extends Fu{
        public ZI(){
            super(10);   //不再赠送super();直接调用父类有参构造
            System.out.println("子类构造方法");
        }
    }
    
    main方法:
    public class Demo01 {
        public static void main(String[] args) {
            ZI zi = new ZI();
        }
    }
    
    输出:父类重载构造
    子类构造方法

    3.只有构造方法才能调用构造方法,super()的父类调用,必须是子类构造方法的第一个语句(也就是不能一个构造掉用多次super())

    总结:在继承中,子类必须调用父类构造方法,不写则默认赠送super(),写了则用写的制定的super()调用,一个构造中super只能有一个,还只能是第一个。

    super和this的区别:

    this:可以在本类成员方法中,访问本类的成员变量
    在本类的成员方法中,访问本类的另一个成员方法
    在本类的构造方法中,访问本类的另一个构造方法
    在第三种用法当中要注意:
    this()调用也必须是构造方法的第一个语句,唯一一个
    super和this两种构造调用,不能同时使用(有了this(),就不会"赠送"super()了)

    展开全文
  • 笔者之前一直很疑惑:为什么别人的源代码的类要继承,居然一定要写super,而且必须写第一行。不然就会报错。刚刚开始还以为是别人的源代码...这个是Java的规定:子类继承父类,子类的构造方法必须调用super()...

    笔者之前一直很疑惑:为什么别人的源代码中的类要继承,居然一定要写super,而且必须写在第一行。不然就会报错。

    刚刚开始还以为是别人的源代码中写了注解还是什么鬼的代码。查过诸多的资料之后发现。

    请注意正解来了!请注意正解来了!请注意正解来了!

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

    那么问题又来,为什么我写的类有时候都不用去调用父类的构造方法?

    因为:如果父类"只"有无参构造方法,且不打算重写子类的构造方法,为节省代码量,子类构造方法可以不写,但是实际上是已经写了,系统默认调用父类无参构造方法super(),即默认会在子类的构造方法中的第一行加上父类的无参构造方法

    下面是我自己的研制代码截图:当父类有无参构造函数或者,没有生命构造函数的时候,是不会报错的

    子类:

    当父类不包含无参构造函数的的时候,几句报错:

    子类:

    这个时候只要在子类构造函数第一行中添加构造函数就可以

    最好再次总结:子类构造函数必须在构造函数第一行调用父类构造函数,

    当子类构造函数没有调用父类构造函数的时候是因为父类构造包含无参构造函数,

    为了节省代码,

    系统会自动添加调用。


    此文出处:https://blog.csdn.net/jcaksonsen/article/details/51564382

    展开全文
  • package four; //定义一个类 class Animals2{ public Animals2(String name){ System.out.println("我是一只"+name); } } ...//定义Mouse类继承Animals类 class Mouse extends Animals2{ ... super("米奇鼠"); }...
  • * 在调用父类的构造方法时,super子类构造方法的第一行,否则会报错*/class Demo6{//显示定义了有参构造方法,这个类就没了隐藏了的无参构造方法public Demo6(String name){this.name = name;this.age = 0;}...
  • 子类继承父类时,由于同时会继承到父类的成员变量和成员方法,同时子类也可以定义与父类同名的成员方法...使用super关键字调用父类构造函数 使用super关键字父类成员变量 使用super关键字父类成员方法 二、使用s...
  • 由于子类不能继承父类的构造方法,因此,要调用...类的构造方法中,通过 super 语句调用该类的父类的构造方法子类访问父类的成员。 使用 super 调用父类的构造方法 子类可以通过 super 关键字来调用...
  • this和super的使用其实很简单,不过有些猿们啊,查看了很多资料后,还是不得要领。 好吧,那我就众望下整理出秘籍,供猿们修练~~~ 此乃家居...使用场景一: 成员方法中,this.变量名 指带当前对象的变量,此时...
  • JAVA,假设A有构造方法A(int a),则类A的其他构造方法中调用构造方法语句格式应该为() A this.A(x) B this(x) C super(x) D A(x) this的作用其中一个就是一个构造方法中调用另一个构造方法,格式为...
  • 构造方法中super()和this()的注意点

    千次阅读 2020-08-27 10:47:41
    每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么编译的时候就会报错。 2)super()和this()类似,区别是,super从子类调用父类的构造方法,this()同一类内调用其它...
  • 自己第一次看完se的时候还...1.区分成员变量和局部变量 这段代码我相信很多人都写过,setName()方法中有一个和成员变量重名的name,那我们怎么区分呢?这时候this关键字就很好的解决了2. this是在方法中使用的...
  • JAVA,假设A有构造方法A(int a),则类A的其他构造方法中调用构造方法语句格式应该为() A.this.A(x) B.this(x) C.super(x) D.A(x) 本题答案选B A选项是调用普通方法的格式 C选项为调用父类...
  • package ... /* * 使用super调用父类的构造方法 */public class TestSuper02 { public static void main(String[] args) { IPhoneX iPhoneX1 = new IPhoneX(10); IPhoneX iPhoneX2...
  • 一、为什么要引入构造方法。...构造方法在new的时候自动执行。且只执行一次。new一次执行一次。 注意:每个类都有构造方法,即使不写也有,编译时javac会自动检查类是否有构造方法,如果有,就执行,...
  • 隐式是指子类构造没有使用super和this时,系统自动子类构造第一行语句之前隐式默认加上super()来调用父类无参构造器,此时如果父类没有super()所对应无参构造器,则会出错。反之显示使用super或this时,...
  • Java构造方法

    千次阅读 多人点赞 2019-09-09 19:26:39
    当新对象被创建的时候,构造方法会被调用。每一个类都有构造方法。当类没有定义构造函数时,系统会指定给该类加上一个空参数的构造函数。这个是类默认的构造函数。当类如果自定义了构造函数,这时默认的构造...
  • 一、为什么要引入构造方法。 当创建对象的时候需要对属性值...构造方法在new的时候自动执行。且只执行一次。new一次执行一次。 注意:每个类都有构造方法,即使不写也有,编译时javac会自动检查类是否有构造方法...
  • Java要求,如果您在构造函数中调用this()或super(),则它必须是第一条语句。 为什么? 例如: public class MyClass { public MyCla
  • package ... /* * 使用super调用父类的构造方法 */public class TestSuper02 { public static void main(String[] args) { IPhoneX iPhoneX1 = new IPhoneX(10); IPhoneX iPhoneX2...
  • public class ThisQuoteTest { String name; int age; String work; public ThisQuoteTest() { this("Lily",23,"teacher");... public ThisQuoteTest(String name,int age,String work) ... this.name =nam
  • 首先我们要知道构造方法是类的一个特殊成员,它会类实例化对象时被自动调用 子类,它在调用父类中空参数的构造函数。因为子类继承父类,会继承到父类的数据,所以必须要看父类是如何对自己的数据进行初始化的...
  • 其实子类的所有构造方法的第一行都有一条隐示super()或者显示的super() 隐示super() 先说一下什么情况下会有隐示的super()。 1.子类构造函数没写super()并且子父类具有无参构造函数。那么子类第一行便会自动一条...
  • 调用父类的构造方法

    千次阅读 2021-01-19 09:44:56
    1、使用super调用父类的构造方法,必须是子类构造方法的第一个语句。 使用this调用重载的构造方法,也必须是构造方法的第一个语句。 可以看到,程序已经标红,这是不行的。解决这个问题,可以自己定义一个init...
  • 大家对java构造方法的理解吗?对于java构造方法一般需要满足以下几条规则: (1)方法名必须与类名保持一致。 (2)不要声明返回类型。 (3)不能被static, final, synchronized, abstract和native修饰。构造方法不能...
  • package Test1; class Person { public String name="not know";...//父类Person的无参构造方法 public Person(){ } //父类Person的有参数构造方法 public Person(String name,int age){//4 //
  • 我们可以子类的构造,通过super关键字调用父类的构造器。 //父类 class Person { private String name; public Person() { } } //子类 class Man extends Person{ private int age; public Man() {...
  • 构造函数必须出现第一行上。 所以,注定了你只能调用一个构造函数。 默认的,父类的或者本类的其它构造,你自己选一个。 ...
  • 一、继承构造方法的执行顺序 创建对象时,会先自动调用父类的构造函数,再自动调用子类的构造函数。 解释:super()表示父类的构造函数并会调用于参数相对应的父类的构造函数。子类,它在调用父类中空参数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,066
精华内容 39,626
关键字:

在构造方法中如调用super语句