gpt4 book ai didi

Java封装概念不清楚

转载 作者:IT老高 更新时间:2023-10-28 20:25:41 26 4
gpt4 key购买 nike

这是基本问题,但我仍然不了解封装概念。我不明白我们如何从其他类更改类的属性。因为每当我们尝试设置类的公共(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)。现在你可能会问,

  • 为什么要使用访问器..?实际上有很多充分的理由考虑使用访问器而不是直接公开类的字段。Getter 和 Setter 使 API 更加稳定。

例如,考虑一个类中的一个公共(public)字段,该字段可供其他类访问。现在稍后,您想在获取和设置变量时添加任何额外的逻辑。这将影响使用 API 的现有客户端。因此,对该公共(public)字段的任何更改都需要更改引用它的每个类。相反,使用访问器方法,可以很容易地添加一些逻辑,比如缓存一些数据,稍后再懒惰地初始化它。此外,如果新值与以前的值不同,则可以触发属性更改事件。所有这些对于使用访问器方法获取值的类来说都是无缝的。

关于它们是什么以及它们是什么的教程和解释太多了。谷歌他们。

至于您当前的问题:

  1. 你有两个不同的类,每个类都有一个主类。那是错的。它们将具有不同的属性。
  2. @Subhrajyoti Majumder 建议的代码更改是正确的。检查答案以解决问题。

与此同时,请继续阅读

为了更好地理解这些概念。希望能帮助到你。 :)

关于Java封装概念不清楚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19044362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com