- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
这是基本问题,但我仍然不了解封装概念。我不明白我们如何从其他类更改类的属性。因为每当我们尝试设置类的公共(public)实例值,我们必须创建该类的对象,然后设置值。每个对象引用不同的内存。所以即使我们改变这不会影响任何其他对象的实例值。
即使我尝试使用静态公共(public)实例值进行更改,我也无法更改类属性值。
示例如下
// 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";
}
}
}
每次我运行 Employee
类时,我都会得到相同的值
打印员工详细信息:0 null
即使我没有遵循封装概念,也无法更改员工类的公共(public)实例值。请帮助我理解我出错的概念。
最佳答案
是的,这有时会有点令人困惑。让我们一步一步来:首先,你需要了解
封装是四个OOP 基本概念之一。封装是将类中的字段设为私有(private)并通过公共(public)方法提供对字段的访问的技术。如果一个字段被声明为私有(private)的,它不能被类外的任何人访问,从而隐藏了类中的字段。因此,封装也称为数据隐藏。
封装可以描述为一个保护屏障,防止代码和数据被类外定义的其他代码随机访问。对数据和代码的访问由接口(interface)严格控制。
封装的主要好处是能够在不破坏使用我们代码的其他人的代码的情况下修改我们实现的代码。借助此功能封装为我们的代码提供了可维护性、灵 active 和可扩展性。
举个小例子:
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;
}
}
上述方法称为访问器(又名 getter 和 setter)。现在你可能会问,
例如,考虑一个类中的一个公共(public)字段,该字段可供其他类访问。现在稍后,您想在获取和设置变量时添加任何额外的逻辑。这将影响使用 API 的现有客户端。因此,对该公共(public)字段的任何更改都需要更改引用它的每个类。相反,使用访问器方法,可以很容易地添加一些逻辑,比如缓存一些数据,稍后再懒惰地初始化它。此外,如果新值与以前的值不同,则可以触发属性更改事件。所有这些对于使用访问器方法获取值的类来说都是无缝的。
关于它们是什么以及它们是什么的教程和解释太多了。谷歌他们。
至于您当前的问题:
与此同时,请继续阅读
为了更好地理解这些概念。希望能帮助到你。 :)
关于Java封装概念不清楚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19044362/
MVC3 中的助手是否在 Controller 和 View 中使用? 助手是放置常用 Controller 方法的正确位置吗? 我想创建一个通用方法来获取数据库中的所有子子 ID,并确保它位于正确的
有人可以阐明这两者之间的区别吗,因为它们存在于执行上下文中?我很难阅读 ECMA 262 v 5规范并清楚地看到差异。 谢谢你, 最佳答案 两者都是执行上下文的组件(相同类型),但它们有不同的用途(f
我是一名优秀的程序员,十分优秀!