🐿️封装
2021-3-5
| 2023-8-3
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
一个class可以包含多个field
 
直接把fieldpublic暴露给外部可能会破坏封装性:
显然,直接操作field容易造成逻辑混乱。为了避免外部代码直接去访问field,可以用private修饰field,拒绝外部访问:
直接操作private修饰的field: 报错java: name 在 Person 中是 private 访问控制
 
 
fieldpublic改成private,外部代码不能访问这些field,那定义这些field有什么用?怎么才能给它赋值?怎么才能读取它的值?
需要使用方法(method)来让外部代码可以间接修改field
虽然外部代码不能直接修改private字段,但是,外部代码可以调用方法setName()setAge()来间接修改private字段。
在方法内部,有机会检查参数对不对。比如,setAge()就会检查传入的参数,参数超出了范围,直接报错。这样,外部代码就没有任何机会把age设置成不合理的值。
 
 

private方法

public方法,自然就有private方法。和private字段一样,private方法不允许外部调用,那定义private方法有什么用?
定义private方法的理由是内部方法是可以调用private方法的:
calcAge()是一个private方法,外部代码无法调用,但是,内部方法getAge()可以调用它
 
 

this变量

在方法内部,可以使用一个隐含的变量this,它始终指向当前实例,因此通过this.field就可以访问当前实例的字段。
如果没有命名冲突,可以省略this
 
如果有局部变量和字段重名,那么局部变量优先级更高,就必须加上this
 
 

参数绑定

调用方把参数传递给实例方法时,调用时传递的值会按参数位置一一绑定。
基本类型参数的传递,是调用方值的复制。双方各自的后续修改,互不影响。
 
 
 

传递引用参数

看一个传递引用参数的例子:
引用类型参数的传递,调用方的变量,和接收方的参数变量,指向的是同一个对象。双方任意一方对这个对象的修改,都会影响对方(因为指向同一个对象嘛)。
 
再看一个例子:
第一个传递引用参数的例子是编辑,第二个是重新赋值。编辑是改变之前地址里面的值,而重新赋值是建立了新的内存
  • Java
  • 类和实例构造方法
    目录