精华内容
下载资源
问答
  • Java构造方法的相互调用

    万次阅读 多人点赞 2017-04-19 10:20:34
    构造方法

    在Java中,当给一个类创建了多个构造方法时,有时想在一个构造方法中调用另一个构造方法以减少代码量。这时可以使用this关键字来实现。
    通常,当使用this关键字时,它意味着“这个对象”或者“当前对象”,并且它自身产生对当前对象的引用。在一个构造方法中,当给传递给它一个参数列表时,它就有了不同的意义。它将直接的调用能够匹配这个参数列表的构造方法。因此,我们可以直接的调用其它构造方法:

    //举例:用this(参数列表)的形式,自动调用对应的构造方法。不可以直接使用类名进行调用。

    public class Person {
            private String name;
            private int age;
            //构造方法一
            public Person() {
                this(null);
            }
            //构造方法二
            public Person(String n) {
                this(n, 12);//调用第三个
            }
            //构造方法三
            public Person(String n, int a) {
                this.name = n;
                this.age = a;
            }
        }

    看例子,第一个构造方法调用第二个的,第二个的再调用第三个。第三个是最终的实现。这样就能减少代码量了。

    展开全文
  • 下面是关于父类构造方法调用的实验:当父类子类都没有定义构造方法时,系统为父类、子类提供一个无参构造方法,并在子类中隐式调用父类无参构造方法:class Father {} class Son extends Father {}我们可以自己写...

    下面是关于父类构造方法调用的实验:

    当父类子类都没有定义构造方法时,系统为父类、子类提供一个无参构造方法,并在子类中隐式调用父类无参构造方法:

    class Father {}
    
    class Son extends Father {}
    我们可以自己写代码来完成同样的工作:
    class Father {
    	public Father(){}
    }
    
    class Son extends Father {
    	public Son(){
    		super();
    	}
    }

    如果我们在Father构造方法中添加一个参数:

    class Father {
    	public Father(int a){
            }
    }
    
    class Son extends Father {
    	public Son(){ //编译器报错: The constructor Father() is undefined
    		super();
    	}
    }

    印证了一点: 如果父类已经定义了一个构造方法,则系统不会再提供无参的构造方法了。

    在这种情况下, 尝试把super()删掉:
        编译器报错:Implicit super constructor Father() is undefined. Must explicitly invoke another constructor,即父类的Father无参构造方法没有定义,说明还是会隐式调用父类的无参构造方法,但是系统没有提供。

    如果我们再把Son中的构造方法也删掉:

        编译器再报错:Implicit super constructor Father() is undefined for default constructor. Must define an explicit constructor,说明还是会尝试调用父类的无参构造方法

    然后我们尝试在Father中添加一个无参构造方法:

    class Father {
    	public Father(){}
    	public Father(int a){}
    }
    
    class Son extends Father {
    	
    }

    就不会报错了。


    结论:
      子类的每一个构造方法都必须显式或隐式调用父类的一个构造方法。如果不显式调用, 则系统隐式调用super(),即父类的无参构造方法(如果父类无任何构造方法, 则系统为父类自动提供一个无参构造方法; 如果父类已经有一个构造方法, 系统不会额外提供无参的构造方法,此时, 如果父类仅定义了有参构造方法, 并且子类没有定义任何的构造方法(系统会为它提供一个无参构造方法, 然后隐式调用父类无参构造方法), 或子类定义的构造方法中没有显式调用父类的有参构造方法(会隐式调用父类的无参构造方法), 就都会因为父类没有无参构造方法而报错。




    展开全文
  • 其实子类的所有构造方法的第一行都有一条隐示super()或者显示的super() 隐示super() 先说一下什么情况下会有隐示的super()。 1.子类构造函数中没写super()并且子父类具有无参构造函数。那么子类第一行便会自动一条...

    在构造子类时。子类创建完,即拥有父类的属性,所以在构造子类之前一定会构造父类。
    其实子类的所有构造方法的第一行都有一条隐示super()或者显示的super()

    • 隐示super()
      先说一下什么情况下会有隐示的super()。
      1.子类构造函数中没写super()并且子父类具有无参构造函数。那么子类第一行便会自动一条隐身的语句super
      父类代码:具有无参构造函数
    public class Fruit {
        private String name;
    
        public Fruit() {
    
        }
    
        public Fruit(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    

    子类代码:可以看到子类的两个构造函数都没有显示的写super(),那么在构造子类的时候就会自动产生super(),并且执行父类的无参构造函数

    public class Apple extends Fruit {
    
        boolean isRed;
    
        public Apple() {
        }
    
        public Apple(boolean isRed) {
            this.isRed = isRed;
        }
    
        public boolean isRed() {
            return isRed;
        }
    
        public void setRed(boolean red) {
            isRed = red;
        }
    }
    

    如果父类没有无参构造函数,那么不能自动生成super(),编译会报错:There is no default constructor available in xxxx

    • 显示的super()
      如果父类没有无参构造函数,或者需要调用父类的有参构造函数就需要显示的调用super();
      父类:没有无参构造函数
    public class Fruit {
        private String name;
    
        public Fruit(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    

    子类:显示调用父类的构造函数,并且传入参数

    public class Apple extends Fruit {
    
        boolean isRed;
    
        public Apple(boolean isRed,String name) {
            super(name);
            this.isRed = isRed;
        }
    
        public boolean isRed() {
            return isRed;
        }
    
        public void setRed(boolean red) {
            isRed = red;
        }
    }
    
    展开全文
  • Java构造方法

    千次阅读 多人点赞 2019-09-09 19:26:39
    Java构造方法 当新对象被创建的时候,构造方法会被调用。每一个类都有构造方法。当类中没有定义构造函数时,系统会指定给该类加上一个空参数的构造函数。这个是类中默认的构造函数。当类中如果自定义了构造函数,...

    Java构造方法

    当新对象被创建的时候,构造方法会被调用。每一个类都有构造方法。当类中没有定义构造函数时,系统会指定给该类加上一个空参数的构造函数。这个是类中默认的构造函数。当类中如果自定义了构造函数,这时默认的构造函数就没有了。

    Java中构造方法重载和方法重载很相似。可以为一个类创建多个构造方法。每一个构造方法必须有它自己唯一的参数列表。

    Java不支持像C++中那样的复制构造方法,这个不同点是因为如果你不自己写构造方法的情况下,Java不会创建默认的复制构造方法。

    构造方法的方法名必须与类名相同

    构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。

    构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。

    一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。

    构造方法可以重载,以参数的个数,类型,顺序。

    构造方法是一个特殊的方法。
    方法结构:
    访问修饰符 类名(参数列表){方法体}

    构造方法重载。
    在没写构造方法是 有一个默认的
    类名(){}构造方法

    this()是调用本类不带参构造方法;
    super()是调用父类不带参的构造方法;

    构造方法和方法的类似之处在于它们都包含可执行代码,区别在于,只有当Java类实例化时才执行构造方法。构造方法通常包含类属性初始化代码,从严格意义上说,构造方法并不是方法,因为它不会返回任何值。

    	public class A{
    		int i=0;
    		public A(){
    			i=2;
    		}
    		public A(int i){
    			this.i=i;
    		}
    	}
    

    默认构造方法
    如果没有任何的构造方法,编译时系统会自动添加一个默认无参构造方法
    1.隐含的默认构造方法

    public A(){}
    

    2.显示的默认构造方法

    	public A(){
    	System.out.print("显示的默认构造方法")
    	}
    

    重载构造方法
    比如原本的类里的构造方法是一个参数的,现在新建的对象是有三个参数,此时就要重载构造方法
    当一个类中有多个构造方法,有可能会出现重复性操作,这时可以用this语句调用其他的构造方法。

    public class A{
    	private int age;
    	private String name;
    	public A(int age,String name){
    		this.age=age;
    		this.name=name;
    	}
    	public A(int age){
    		this(age,"周杰伦");//调用 A(int age,String name)构造方法
    	}
    	public A(){
    		this(1);//调用 A(int age)构造方法
    	}
    	public void setName(String name) {this.name=name;}
    	public String getName() {return name;}
    	public void setAge(int age) {this.age=age;}
    	public int getAge() {return age;}
    }
    
    A a=new A(20,"邓紫棋");
    A b=new A(20);
    A c=new A();
    String name = a.getName();
    String name1 = b.getName();
    int age = c.getAge();
    System.out.println(name);
    System.out.println(name1);
    System.out.println(age);
    
    展开全文
  • java构造方法调用普通方法

    千次阅读 2018-08-23 09:37:45
    参考文章:... 参考资料:《java 编程思想》第四版 class Fu{ void draw(){ System.out.println("基类的 draw 方法"); } Fu(){ System.out.println(...
  • Java构造方法调用顺序的理解

    千次阅读 2018-06-08 17:02:34
    ​ 之前对构造函数的调用顺序一直很迷,只知道很死板地记着“父类构造函数先于子类构造函数调用”,但是其中的原因并没有去深究。前几周大概看了一遍JAVA编程思想,真的是博大精深……但是对这个概念起码有了一点...
  • java构造函数的调用

    千次阅读 2018-11-09 01:35:42
    构造函数的调用,需要使用this关键字 this(); //调用无参构造函数Food() this(name); //调用有参构造函数Food(String name) 作用: 在一个构造函数中调用另一个构造函数,主要是为了增加代码的复用性。 ...
  • java构造方法与重载

    千次阅读 2019-02-20 22:05:19
    3.构造方法是在创建实例时会被自动调用 4.一个类可能没有构造方法,但一定有系统隐蔽无参的构造方法,也有多个构造方法(他们之间构成重载) 5.定义了有参数的构造方法,就会屏蔽掉系统无参构造方法 6.构造方法不能...
  • Java中在一个构造方法调用另外一个构造方法的好处?以及如何调用? 直接上例子: 如图便在无参构造方法调用了有参构造,又在有参构造中调用了有参构造。 上图中,我们仅仅使用了红色方框中的一句Student ...
  • Java子类调用父类的构造方法

    千次阅读 2020-05-20 20:44:47
    一、自动调用父类无参构造方法 //这是父类 public class SuperClass { //父类无参构造方法 public SuperClass(){ System.out.println("父类无参构造方法"); } //父类带参构造方法 public SuperClass(String ...
  • 先说构造方法,在使用Class类中的,newInstance() 取得实例化对象时,会出现一些问题。看下面出错的代码:package com.jmd.bingo; class Person { private String name; private int age; // public Person() { //...
  • Java构造方法和子类构造方法

    千次阅读 多人点赞 2019-07-21 23:50:09
    Java构造方法 构造方法是用于初始化一个新建的对象。 普通构造方法 方法名与类名相同 无返回类型 子类不能继承父类的构造方法 不能被static、final、abstract修饰(有final和abstract修饰的是不能被子类继承的,...
  • Java构造函数中调用构造函数

    千次阅读 2019-07-22 23:44:39
    Java中,当为一个类创建了多个构造函数时,有时想在一个构造函数中调用另一个构造函数以减少代码量。这时可以使用this关键字来实现。通常,当使用this关键字时,它意味着“这个对象”或者“当前对象”,并且它自身...
  • java父类子类构造方法及方法的调用

    千次阅读 2019-04-13 13:43:44
    super(5)表明调用了父类A的构造方法, 接着是调到父类构造方法去了,要执行setValue()方法,我天真地是调用A的setValue(),然而,现实是: 执行了B类的setValue,原因是我们目前是在执行B类的构造方法,...
  • 继承有个特点,就是子类无法访问父类的private字段或者private方法。例如,Student类就无法访问Person类的name和age字段: class Person { private String name; private int age; } class Student extends ...
  • 在对对象成员变量初始化时,有输入时,通过有参构造方法进行赋值。当没有输入时,可以给个初始值,就通过无参写入默认的,无参调有参...// main方法中 new调用无参构造方法,再完成上面的无参调有参 new 类名(); ...
  • Java中,如果一个构造方法调用另一个构造方法,需要是用this(参数列表)的形式,自动调用对应的构造方法。不可以直接使用类名进行调用。public class Person { private String name; private int age; public ...
  • 在一个Java类中,其方法可以分为成员方法和构造方法两种。构造方法是一个与类同名的方法, 在Java类中...悉这个限制的话,那么还是老老实实的采用传统的构造方法调用方式为好。虽然比较麻烦 ,但是至少不会出错。
  • Java中如何在无参构造方法调用有参构造方法

    万次阅读 多人点赞 2016-08-10 14:27:14
    参数的扩展和构造方法调用都是有一定的规律的。 有参调无参,多参调少参。。扩展参数的时候,最好保持原来的顺序。除非为了实现特殊的功能效果(个人以为主要是练基本功使用) 无参调有参需要传实参!!package ...
  • Java构造方法的作用

    万次阅读 多人点赞 2019-04-19 22:58:59
    初学Java构造方法时,根本不能理解构造方法有什么用,自己写程序的时候也从来没有用过。于是刚开始我写的程序是这样的: package test3; public class Student { private String name; private long ID; ...
  • JAVA构造函数(方法)

    千次阅读 多人点赞 2018-12-27 14:47:11
    java构造函数,也叫构造方法,是java中一种特殊的函数。函数名与类名相同,无返回值。 作用:一般用来初始化成员属性和成员方法的,即new对象产生后,就调用了对象了属性和方法。 构造函数是对象一建立就运行,给...
  • Java中规定:在实例化子类对象时,必须先调用父类的构造方法,再调用子类的构造方法(先有父母再有孩子)。且必须在子类构造方法的第一行调用父类方法。 一般在子类中显式的调用父类构造方法,若没有显式调用调用...
  • Java构造方法 重载与重写

    万次阅读 多人点赞 2019-04-18 18:10:44
    构造方法是在创建一个对象使用 new 操作符时候调用构造方法的作用是初始化对象,也可以重载(即-可以有多个同名的构造方法,但是需要有不同的签名) 一个类可以不定义构造方法,类中会隐含创建一个方法体为空的...
  • Java继承关系下的构造方法调用

    千次阅读 2015-03-19 16:24:47
    Java中创建一个类的对象时,如果该类存在父类,则先调用父类的构造方法,然后再调用子类的构造方法。本文描述子类中如何调用父类的构造方法
  • 构造方法何时被调用 ( ) A.类定义时 B.创建对象时 C.调用对象方法时 D.使用对象的变量时 正确答案 B 答案解析 其是应该说是实例化对象时被调用,一个类的创建会默认有一个无参构造方法,当你实例化的时候...
  • public class A { public String name;... System.out.println("父类的无参数构造方法"); } public A(String str){ this.name=str; System.out.println("父类的有参数构造方法"); } } ...
  • Java子类调用父类构造方法

    万次阅读 多人点赞 2017-09-29 14:49:15
    Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的?   答案如下:   当你new一个子类对象的...构造方法是new一个对象的时候
  • Java构造方法和@Autowire

    千次阅读 2019-06-14 13:48:03
    2.子类构造方法在没有显示调用父类有参构造方法时会默认调用父类无参构造方法(没有则报错)如: public class TestA extends Test { /** * 会默认调用父类的无参构造方法,父类没有时则开发工具会提示...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 879,232
精华内容 351,692
关键字:

java构造方法调用方式

java 订阅