use*_*404 24 java encapsulation
这是基本问题,但我仍然不理解封装概念.我不明白如何从其他类更改类的属性.因为每当我们尝试设置类的公共实例值时,我们必须创建该类的对象然后设置值.每个对象引用不同的内存即使我们更改实例值,这也不会影响任何其他对象.
即使我尝试使用静态公共实例值进行更改,我也无法更改类属性值.
实例如下
// Employee class
public class Employee {
public static int empid;
public static String empname;
public static void main(String[] args) {
System.out.println("print employe details:"+empid+" "+empname);
}
// EmployeeTest class
public class EmployeeTest {
public static void main(String[] args) {
Employee e = new Employee();
e.empid=20;
e.empname="jerry";
Employee.empid=10;
Employee.empname="tom";
}
}
}
Run Code Online (Sandbox Code Playgroud)
每次我Employee上课,我都会得到相同的价值
print employe details:0 null
即使我没有遵循封装概念,我也无法改变员工类的公共实例值.请帮助我理解我出错的概念.
use*_*071 39
是的,有时这可能有点令人困惑.让我们一步一步走:首先,你需要了解
封装是四个一个基本的OOP概念 .Encapsulation是一类私人制作领域,并通过公共方式提供接入领域的技术.如果某个字段被声明为私有,则该类之外的任何人都无法访问该字段,从而将该字段隐藏在该类中.因此,封装也称为数据隐藏.
封装可以被描述为一种保护屏障,可以防止代码和数据被类外定义的其他代码随机访问.对接口严格控制对数据和代码的访问.
封装的主要好处是能够修改我们实现的代码而不破坏使用我们代码的其他人的代码.通过此功能,Encapsulation为我们的代码提供了可维护性,灵活性和可扩展性.
举一个小例子:
public class EncapTest{
private String name;
private String idNum;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public String getIdNum(){
return idNum;
}
public void setAge( int newAge){
age = newAge;
}
public void setName(String newName){
name = newName;
}
public void setIdNum( String newId){
idNum = newId;
}
}
Run Code Online (Sandbox Code Playgroud)
上述方法称为Accessors(又名getter和setter).现在你可能会问,
例如,考虑一个由其他类访问的类中的字段public.现在稍后,您希望在获取和设置变量时添加任何额外的逻辑.这将影响使用API的现有客户端.因此,对此公共字段的任何更改都需要更改引用它的每个类.相反,使用访问器方法,可以轻松添加一些逻辑,如缓存一些数据,稍后懒洋洋地初始化它.此外,如果新值与先前值不同,则可以触发属性更改事件.所有这些都将与使用访问器方法获取价值的类无缝连接.
关于它们如何以及它们是什么,有很多教程和解释.谷歌他们.
至于你当前的问题:
在此期间,请继续阅读
为了更好地理解这些概念.希望能帮助到你.:)
您似乎分别运行两个不同的类,并假设运行时对属性所做的更改EmployeeTest 将反映在Employee运行中.请注意,更改将反映在同一JRE实例中.对不起,万一我误解了你的问题.
编辑:根据用户输入.以下是如何访问和更新静态成员值的代码:
class Employee {
public static int empid;
public static String empname;
public static void main(String[] args) {
System.out.println("print employe details:" + empid + " " + empname);
}
}
// EmployeeTest class
public class EmployeeTest {
public static void main(String[] args) {
Employee e = new Employee();
e.empid = 20;
e.empname = "jerry";
Employee.empid = 10;
Employee.empname = "tom";
Employee.main(null);
}
}
Run Code Online (Sandbox Code Playgroud)
public static字段与类相关联而不是与对象相关联,它破坏了对象的封装规则。
Employee具有两个封装字段的类empid & empname。
public class Employee {
private int empid;
private String empname;
public int getEmpid(){
return this.empid;
}
public void setEmpid(int empid){
this.empid = empid;
}
...
}
public class EmployeeTest {
public static void main(String[] args) {
Employee e = new Employee();
e.setempId(1);
Employee e1 = new Employee();
e1.setempId(2);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44843 次 |
| 最近记录: |