封装
一、为什么需要封装
- 创建对象时,赋值比较麻烦。可能记不住属性名和属性的类型。
- 创建对象时,赋值可能不合法。
User.java
public class User {
String name;
int age;
String adr;
}
UserManage.java
public class UserManage {
public static void main(String[] args) {
User user1 = new User();
user1.age = -100;
}
}
二、如何实现封装
实现封装有两步:
第一步,将不能暴露的成员(属性)隐藏起来。比如Customer类中的age,就不能让其在类的外部被直接赋值。所以可以通过将属性定义为私有的,也就是在属性定义前加上private修饰符。
第二步,用公共方法来实现对隐藏属性的访问(setter,getter方法),给函数加上public修饰符,将该方法定义为公共的。
User.java
public class User {
String name;
private int age;
String adr;
public void setAge(int age) {
if (age < 0){
System.out.println("age无法赋值");
}
this.age = age;
}
public int getAge() {
return age;
}
}
UserManage.java
public class UserManage {
public static void main(String[] args) {
User user1 = new User();
user1.setAge(25);
System.out.println("user1.age = " + user1.getAge());
}
}
output
user1.age = 25
单例模式
一、单例模式的特点:
- 单例类只能有一个实例。
- 它必须自行创建这个实例。
- 它必须自行向整个系统提供这个实例。 二、实现方法
- 第一步,创建一个Customer类
Customer.java
public class Customer{
//创建一个Customer的对象
private static Customer instance = new Customer();
//用private修饰构造函数,这样这个类就不会在类外被实例化
private Customer(){}
//获取唯一可用的对象
public static Customer getInstance(){
return instance;
}
public void showMessage(){
System.out.println("Hello World!");
}
}
- 第二步,从Customer类获取唯一的对象
CustomerManage.java
public class CustomerManage {
public static void main(String[] args) {
//不合法的构造函数
//编译时错误:构造函数 Customer() 是不可见的
//Customer customer1 = new Customer();
//获取唯一可用的对象
Customer customer1 = Customer.getInstance();
//显示消息
customer1.showMessage();
}
}
- 第三步,执行程序,输出结果:
Hello World!