Java 从其他类访问受保护字段
对于下面的代码,我可以访问Java 从其他类访问受保护字段,java,Java,对于下面的代码,我可以访问SeatPlan类的受保护字段,并从教室类更改其值,这看起来对这些数据不安全 这正常吗?难道不是只有它的子类才能访问受保护的字段吗?否则我需要将它们更改为private字段 假设我有一个抽象类,其中包含受保护的字段: public abstract class SeatPlan { protected int rowNum; protected int columnNum; public abstract void method(); }
SeatPlan
类的受保护字段,并从教室
类更改其值,这看起来对这些数据不安全
这正常吗?难道不是只有它的子类才能访问受保护的字段吗?否则我需要将它们更改为private
字段
假设我有一个
抽象
类,其中包含受保护的
字段:
public abstract class SeatPlan {
protected int rowNum;
protected int columnNum;
public abstract void method();
}
然后它有子类:
public class ASeatPlan extends SeatPlan {
public ASeatPlan(){ // constructor
this.rowNum= 10;
this.columnNum = 7;
}
// omitted code
}
public class BSeatPlan extends SeatPlan {
public BSeatPlan(){ // constructor
this.rowNum= 7;
this.columnNum = 15;
}
// omitted code
}
classRoom
包含SeatPlan
对象的private
字段:
public class Room {
private SeatPlan seatPlan;
public Room(SeatPlan seatPlan){ // constructor
this.seatPlan = seatPlan;
}
public SeatPlan getSeatPlan(){ // getter method
return seatPlan;
}
//omitted code
}
public class Classroom {
public SeatPlan doSomething(Room room){
SeatPlan seats = Room.getSeatPlan();
seats.rowNum = 99999; <--------------- accidentally change the value ------
//omitted code
}
公共教室{
私人海图海图;
公共房间(SeatPlan SeatPlan){//
this.seatPlan=seatPlan;
}
公共SeatPlan getSeatPlan(){//getter方法
返回海图;
}
//省略代码
}
公共课堂{
公共座椅平面剂量仪(房间){
SeatPlan seats=Room.getSeatPlan();
seats.rowNum=99999;我想你把C#和Java搞混了
在C#中,protected
stuff只能通过子类访问。但在Java中,protected
stuff可以在同一个包或子类中访问
这就是为什么您可以从教室更改座椅平面的值
这不安全吗
在我看来,是的。我认为你不应该改变座位计划的行数和列数
我如何使它安全
你应该重新设计你的座位计划课程。这里有一个大致的想法:
public final class SeatPlan {
private SeatPlan(int rowNum, int colNum) {
this.rowNum = rowNum;
this.colNum = colNum;
}
private int rowNum;
private int colNum;
//You should add getters for rowNum and colNum here
//But I'm lazy so I did not do it for you
public static final SeatPlan PLAN_A = new SeatPlan(10, 7);
public static final SeatPlan PLAN_B = new SeatPlan(7, 15);
}
我认为你把C#和Java混淆了
在C#中,protected
stuff只能通过子类访问。但在Java中,protected
stuff可以在同一个包或子类中访问
这就是为什么您可以从教室更改座椅平面的值
这不安全吗
在我看来,是的。我认为你不应该改变座位计划的行数和列数
我如何使它安全
你应该重新设计你的座位计划课程。这里有一个大致的想法:
public final class SeatPlan {
private SeatPlan(int rowNum, int colNum) {
this.rowNum = rowNum;
this.colNum = colNum;
}
private int rowNum;
private int colNum;
//You should add getters for rowNum and colNum here
//But I'm lazy so I did not do it for you
public static final SeatPlan PLAN_A = new SeatPlan(10, 7);
public static final SeatPlan PLAN_B = new SeatPlan(7, 15);
}
你需要理解访问修饰符。这里有一个简单的教程:代码的简单解决方案这是最好的解决方案,因为你需要知道如何在每个Java项目中使用修饰符。你可能需要理解访问修饰符。这里有一个简单的教程:简单的这是最好的解决方案,因为您需要知道如何为每个Java项目使用修饰符。