Java构造函数的继承-Java 学习笔记 (14)

本文深入探讨了Java中构造函数的概念,特别是派生类构造函数如何调用基类构造函数的过程。通过具体示例展示了不同构造函数的使用方法,并解释了super和this关键字的作用。

Java的派生类在对内存中有两部分构成,一部分是继承自父类的对象,另一部分则是本身新有的成员。 所以,在构造派生类对象时,应该先构造父类对象,调用父类的构造函数(Constructor)。在派生类没有显式调用父类的构造函数时,Java编译器调用父类的默认构造函数(就是无参数的构造函数)。

示例:
this关键字指代当前对象 this();是当前对象的构造函数
super关键字指代父类对象 super();是父类构造函数

class Person {
    
private String name;
    
private int age;
    
//默认构造函数
    Person() {
        
this("DefaultName",20); //调用重载构造函数,必须放在函数体第一行
        System.out.println("Person default constructor!");
    }

    Person(String name,
int age) {
        
this.name=name;
        
this.age=age;
    }

    
public void display() {
        System.
out.println("Name:"+name);
        System.
out.println("Age:"+age);
    }

}

class Student extends Person {
    
private String school;
    
//默认构造函数这里会自动调用父类默认构造函数
    Student() {
        System.
out.println("Student default constructor!");
        
this.school="DefaultSchool";
    }

    Student(String name,
int age,String school) {
        super(name,age);
//调用父类构造函数,必须放在函数体第一行
        this.school=school;
    }

    
//重写函数
    public void display() {
        super.display();
        System.
out.println("School:"+school);
    }

}

public class ConstructorTest {
    
public static void main(String[] args) {
        Person p1
=new Person();
        System.
out.println();
        p1.display();
        System.
out.println();
        Person p2
=new Person("nyzhl",22);
        System.
out.println();
        p2.display();
        System.
out.println();
        Student s1
=new Student();
        System.
out.println();
        s1.display();
        System.
out.println();
        Student s2
=new Student("zhaohongliang",23,"Nanyang Normal Univercity");
        System.
out.println();
        s2.display();
    }

}

运行结果:

Person default constructor!

Name:DefaultName
Age:20


Name:nyzhl
Age:22

Person default constructor!
Student default constructor!

Name:DefaultName
Age:20
School:DefaultSchool


Name:zhaohongliang
Age:23
School:Nanyang Normal Univercity

分析:
           Person p1=new Person();
       声明新对象p1 调用Person默认构造函数
 
        Person p2
=new Person("nyzhl",22);
            声明新对象p2 调用Person第二个重载构造函数
  
  Student s1=new Student();
        声明新对象s1 先父类调用Person默认构造函数,再调用Student类默认构造函数
        Student s2=new Student("zhaohongliang",23,"Nanyang Normal Univercity");
           声明新对象s2  过程如下
           new Person("zhaohongliang",23);
        this.school="Nanyang Normal Univercity";

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值