Java中父类和子类关于构造方法和私有属性的几个问题

本文探讨了Java中父类和子类构造方法的关系,强调子类实例创建依赖于父类构造方法。即使没有显式定义,JVM也会为子类提供默认构造器,隐式调用父类无参构造器。当父类缺少默认构造器时,子类需显式调用父类有参构造器。同时,文章指出,子类可以继承父类的private属性,但不能直接访问,需通过父类的set/get方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java中父类和子类关于构造方法和私有属性的几个问题

一、什么是默认构造方法?子类构造方法与父类构造方法的关系?
通过前面的学习可以知道:默认构造方法是指无参构造方法,(1)隐式包含的默认构造方法:当类的定义中没有任何显式的构造方法(无参或有参)时,则系统默认会给该类一个隐式的无参构造方法。 (2)显式定义的默认构造方法:当类中显式定义了一个无参构造方法。
对于以下示例:

//父类
public class Person {
   
   
    public String name;
    public int age;

    public Person(){
        System.out.println("父类无参构造方法执行了");

    }
}
//子类及其实现

public class Charactor extends Person {
   
   

    public void run(){
        System.out.println("Charactor的实例对象开始奔跑!");
    }

    public static void main(String[] args) {
        Charactor cp=new Charactor();
        cp.run();
    }
}

运行结果如下:

父类无参构造方法执行了
Charactor的实例对象开始奔跑!

这里注意到子类Charactor中并没有显式定义构造方法,但依然可以执行的原因是JVM编译时自动为其添加了默认构造方法(无参的),如下:

public Charactor(){ }

如果显式地添加上述代码,运行结果是一致的。
我们还注意到运行结果中有“父类无参构造方法执行了”,说明父类构造方法也执行了,其实这里说明任何一个类的实例对象的实现(创建)都依赖于其父类实例对象的实现。而这里Charactor的构造方法中其实也隐式地调用了父类的构造方法,完整的Charactor构造方法如下:

public Charactor(){
    super();
}

可以发现显式添加上述代码后,运行结果依然一致。
从上面可以总结出:
*子类实例的创建依赖于父类的实例,所以就依赖于父类的构造方法,而如果没有显式地定义子类的构造方法,系统会自动隐式地给其添加无参构造方法。无论是直接显式编写代码还是系统自动添加的无参构造方法,系统都会在其中隐式地添加父类的默认构造方法。
那么当父类中缺少默认构造方法时呢?*


public class Person {
   
   
    public String name;
    public int age;

    public Person(String name,int age){
        this.name=name;
        this.age=age;
        System.out.println("父类构造方法执行了");

    }
}

public cl
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值