首页 新闻 搜索 专区 学院

请问为什么同样的功能,很多人都用第二种方式

0
[待解决问题]

public class Test1 {

public String name = "wang";

public Test1() {
    Log.d("test", "Test1()");
}

public void Main() {
    Log.d("test", "Main("+ name +")");
}

}

public class Test2 {

private String name = "wang";

public Test2() {
    Log.d("test", "Test2()");
}

public void SetName(String str){
    name = str;
}

public void Main() {
    Log.d("test", "Main("+ name +")");
}

}

Test1 t1 = new Test1();
t1.name = "yi";
t1.Main();

    Test2 t2 = new Test2();
    t2.SetName("er");
    t2.Main();

我想知道为什么

菜菜灰的主页 菜菜灰 | 初学一级 | 园豆:93
提问于:2020-06-19 14:38
< >
分享
所有回答(3)
0

你是不是想问:
为什么不直接定义一个public的字段,而是要定义public的set和get方法操作private的字段?我能想到的原因有两个:

  1. set方法可以对输入的值进行检查,比如Age,如果有人赋值了1000,可以抛出异常,这样写更安全
  2. 如.net这样的平台,很多数据绑定依赖于属性(属性就是简化了的get和set方法)

如果是常量,就没有必要用set和get方法,直接用public的字段就好

面向对象编程的原则是:一个类的数据不应该从外部直接修改,而是通过公开的方法来修改

会长 | 园豆:9577 (大侠五级) | 2020-06-19 14:59

感谢

支持(0) 反对(0) 菜菜灰 | 园豆:93 (初学一级) | 2020-06-28 08:16
1

第二种方法进行了数据封装了吧,没有对外暴露name这个属性,只是提供的SetName这个方法,如果需要重写业务逻辑变了也只需要修改SetName方法,而不需要在每个new对象的地方去进行修改。

吴先森 | 园豆:204 (菜鸟二级) | 2020-06-19 15:13
0

怎么感觉就像字段 与属性 的封装?

private String _name ;
public string Name{ get _name set _name } 这样?

Cgrain | 园豆:1096 (小虾三级) | 2020-06-19 21:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册