java protected 构造方法_java中子类调用父类构造方法注意事项

本文介绍了Java中protected关键字的作用,允许子类访问受保护的字段和方法。在继承关系中,使用super关键字引用父类的字段。当父类没有默认构造方法时,子类必须显式调用super()并传入参数,以确保正确初始化。不正确的构造方法调用会导致编译错误。

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

protected继承

继承有个特点,就是子类无法访问父类的private字段或者private方法。例如,Student类就无法访问Person类的name和age字段:

class Person {

private String name;

private int age;

}

class Student extends Person {

public String hello() {

return"Hello, " + name; // 编译错误:无法访问name字段

}

}

这使得继承的作用被削弱了。为了让子类可以访问父类的字段,我们需要把private改为protected。用protected修饰的字段可以被子类访问:

class Person {

protected String name;

protected int age;

}

class Student extends Person {

public String hello() {

return"Hello, " + name; // OK!

}

}

因此,protected关键字可以把字段和方法的访问权限控制在继承树内部,一个protected字段和方法可以被其子类,以及子类的子类所访问,后面我们还会详细讲解。

2.super的使用

super关键字表示父类(超类)。子类引用父类的字段时,可以用super.fieldName。例如:

class Student extends Person {

public String hello() {

return"Hello, " + super.name;

}

}

上面的代码执行会有编译错误,student构造方法,无法调用Person的构造方法。

解析:任何class的构造方法,必须先构造发父类的构造方法。如果没有明确的调用父类的构造方法,编译器会自动帮我们加一句super(),所以Student类的构造方法实际上是这样

那么问题就出在父类即Person类没有默认的构造方法,子类即Student必须显示调用重载以后的构造函数,即

Student类中的写法为

总结:如果父类没有默认的构造方法,子类必须显示地调用super()并给出参数,让编译器定位到一个合适的构造方法。同时,子类不会继承任何父类的构造方法,子类默认的构造方法是编译器自动生成的,不是继承的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值