java基础 --- 构造器

Posted Overboom

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础 --- 构造器相关的知识,希望对你有一定的参考价值。

1. 什么是构造器

1.1 构造器的概念

构造器通常也叫构造方法或者构造函数。

简单点说,就是C++中的构造函数,但是在java中是没有析构函数的,java提供了垃圾回收器,对于不再使用的资源会自动释放,这点比C++简单。那我们来重新梳理下构造函数需要care的点。

1.2 构造器的作用

构造器是用来初始化成员属性和成员方法的,在创建对象的时候会被自动调用。

2. 构造方法和实例方法的区别

构造方法和实例方法主要区别于三个方面:修饰符、返回值、命名

  • 修饰符

                  和实例方法一样,构造器可以有任何访问的修饰符,public、private、protected、或者default,都可以对构造方法进行修饰。不同于实例方法的是,构造器不能有任何非访问性质的修饰符,如:                           static、final、synchronized、abstract等都不能修饰构造方法。

  • 返回值

                 实例方法可以返回任何类型的值或者无返回值(void),而构造方法是没有返回类型的,void也不行

来个示例看下:

public class VoidConstructor {
    
    VoidConstructor(){
        // 构造器
    }
    
    void VoidConstructor() {
        // void 方法,不是构造器
    }
}

3. 构造器的特点

  • 构造器必须与类同名【若同一个源文件中有多个类,则构造器必须与公共类同名】
  • 构造器支持重载
  • 构造器没有返回值,没有返回类型
  • 若不添加构造器,编译器会默认提供空的构造器

4. 构造函数的继承

1.子类中无构造函数,可直接继承父类中无参构造函数,前提是左右变量均为public

如下:父类Student中有空构造函数Student(),子类Pupil中有空构造函数Pupil(),后者会继承前者。

注:在本例中,父类中的name、height都是public的,如果是private就无法直接继承。

package javastudy;

public class ConfunDemo5 {

    public static void main(String[] args) {
        Pupil z=new Pupil();
        z.show();
    }
}
class Student{                   //父类Student
    public String name;
    public int height;
    public Student()
    {
        this.name="";
        this.height=0;
    }
}
class Pupil extends Student{      //子类Pupil
    private int score;
    public Pupil(){                //无参构造函数Pupil()直接继承了父类中的无参构造函数Student()
        score=0;
    }
    public void show(){
        System.out.print("姓名:"+name+"\\n身高:"+height+"\\n分数:"+score);
    }
}

输出:

姓名:
身高:0
分数:0

 2、子类中无参构造函数继承父类中无参构造函数时,父类参数是private的,无法直接

需要在父类中使用get方法来调用私有变量值。

package javastudy;

public class ConfunDemo5 {

    public static void main(String[] args) {
        Pupil z=new Pupil();
        z.show();
    }
}
class Student{                //父类Student
    private String name;
    private int height;
    public Student()
    {
        this.name="";
        this.height=0;
    }
    public String getName(){
        return name;
    }
    public int getHeight(){
        return height;
    }
}
class Pupil extends Student{    //子类Pupil
    private int score;
    public Pupil(){                //无参构造函数Pupil()直接继承了父类中的无参构造函数Student(),但是父类中的name、height是private的
        score=0;
    }
    public void show(){
        System.out.print("姓名:"+getName()+"\\n身高:"+getHeight()+"\\n分数:"+score);  //输出时,直接用get方法名。
    }
}

3、使用super调用父类的构造函数

super必须写在方法的首行

package javastudy;

public class ConfunDemo5 {

    public static void main(String[] args) {
        Pupil z=new Pupil("隔壁老王",111,222);
        z.show();
        
        Pupil w=new Pupil();
        w.show();
    }
}
class Student{                //父类Student
    public String name;
    public int height;
    public Student()
    {
        this.name="";
        this.height=0;
    }
    public Student(String n,int m)
    {
        name=n;
        height=m;
    }
}
class Pupil extends Student{    //子类Pupil
    private int score;
    public Pupil(){                
        super("孙悟空2",501);    //使用super调用父类Student(String n,int m)方法,同时传递实际数值。super必须写在方法的首行。如果这里写super(),则调用的是父类中的Student()方法。
        score=0;
    }
    public Pupil(String x,int y,int z){        //
        super(x,y);              //使用super调用父类Student(String n,int m)方法,其中super中的参数名称必须与构造函数中的参数名称一致。
        score=z;
    }
    public void show(){
        System.out.println("姓名:"+name+"\\n身高:"+height+"\\n分数:"+score);
    }
}

 输出:

姓名:隔壁老王
身高:111
分数:222
姓名:孙悟空2
身高:501
分数:0

 

参考链接:

https://blog.csdn.net/qq_41620160/article/details/79443524

https://www.cnblogs.com/ibelieve618/p/6365631.html

https://baijiahao.baidu.com/s?id=1660565391219190318&wfr=spider&for=pc

以上是关于java基础 --- 构造器的主要内容,如果未能解决你的问题,请参考以下文章

代码笔记Java基础:类的继承(构造器)

java基础

Java——线程池

Java线程池详解

Java线程池详解

构造代码块----java基础总结