Java 中protected详解

本文详细解析了Java中protected修饰符的作用范围。protected修饰的方法或属性可以在同一个包内的任意类及不同包内的子类中访问,但在不同包且非子类的情况下则无法直接访问,只能通过get或set方法间接操作。

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

Java 中protected详解

类NewObject中有protected修饰的方法或者属性,则:

同一个包中
•可在同一个包里的子类中实例化 NewObject 类获得对象,然后可用该对象访问protected修饰的方法或者属性,即 . 操作访问。
•可在同一个包里的非子类中实例化 NewObject 类或同一包下的子类获得对象,然后可用该对象访问protected修饰的方法或者属性。
非同一个包中
•可在非同一个包里的类(有所谓有没有关系)中实例化 NewObject 类获得对象,但无法用该对象直接访问protected修饰的方法或者属性。但可以通过get或者set方法进行操作。
•可在非同一个包里的 NewObject 类的子类中调用 NewObject 类中protected修饰的方法或者属性,即protected修饰的方法和属性可被不同一个包中的子类继承。
•简而言之,在非同一个包内,可在继承的类中操作父类中的protected方法或者属性,但不可以在初始化类对象来进行对NewObject 对象中的protected方法或者属性访问。

不同包下的例子

// com.lb.phj包下person类,用于设置名字的方法
package com.lb.phj;

public class Person {

private String name;
//protected权限
protected void setName(String name)
{
    this.name = name;
}

public void print()
{
    System.out.println("名字是:"+name);
}

}

// com.lb.name包下的类,用于设置名字的方法
package com.lb.name;

import com.lb.phj.Person;

public class Li extends Person
{

}
class Wang extends Person
{
public void setMyName(String name)
{
setName(name);
}

public void setLiName(String name)
{
    Li li = new Li();

// li.setName(name); 错误
li.print();
}
}

原因:子类只能在自己的作用范围内访问自己继承的那个父类protected域,而无法到访问别的子类(同父类的亲兄弟)所继承的protected域。
若在wang中访问li的protected方法,可以在Li这类中写上
public void setMyName(String name)
{
setName(name);
}
相当于适配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值