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基础 --- 构造器的主要内容,如果未能解决你的问题,请参考以下文章