一、封装的概念
将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。
优点:
- 良好的封装可以减少耦合(提高代码间的独立性)。
- 更好的维护代码,加强了代码安全性。
- 更好的控制成员变量。
二、访问限定符
Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了四种访问限定符:
范围 | private | defaut | protected | public | |
1 | 同包同类 | √ | √ | √ | √ |
2 | 同包不同类 | √ | √ | √ |
3 | 不同包中子类 | √ | √ | ||
4 | 不同包非子类 | √ |
- 其中defaut是默认的限定符,当你什么限定符都不写的时候,默认就是defaut。
- 限定符不仅可以限制类成员变量,也可以限制类的可见性。
- protected在继承中会详细讲解。
class Dog{ public String name;//public修饰 private int age;//private修饰 String color;//默认,default修饰 public Dog(String name, int age, String color) { this.name = name; this.age = age; this.color = color; } public void eat(){ System.out.println(name + "在吃狗粮"); } } public class Test1 { public static void main(String[] args) { Dog dog = new Dog("豆豆",1,"白色"); System.out.println(dog.name);//public修饰,可以被任何类访问,可以打印 System.out.println(dog.color);//默认,default修饰,可以在本包访问,可以打印 System.out.println(dog.age);//private修饰,只可以在Dog类访问,无法打印 } }
那我们就没有办法访问 private修饰的成员变量了吗?那当然是有的。
三、如何访问private修饰的成员变量
public int getAge() { return age; } public void setAge(int age) { this.age = age; }
就如上面代码,我们只需要借助getAge(),setAge(),然后直接访问 getAge(),那么就可以打印这个属性了。
System.out.println(dog.getAge());
总结
封装是面向对象程序三大特性之一,这次为大家带来封装,我们下次见!