哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路!
这一节啊,咱们要学习的内容是Java的封装。
1. 什么是封装
Java的封装是指,在一个类中把一些重要的信息隐藏起来,使得外部不能直接访问。
Java的封装是一种面向对象编程技术,它把类中的属性和方法封装在一起,使外部只能通过特定的方法访问类中的属性和方法,这样可以让外部不能直接修改类中的属性和方法,从而有效控制类的内部状态。
例如,定义一个Person类,它有两个属性name和age,我们可以通过下面的代码来封装它:
public class Person{
private String name;
private int age;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
}
在上面的代码中,将name和age属性封装在Person类中,并且为它们提供了getter和setter方法,这样外部就只能通过这些方法来获取和修改类中的属性,从而有效地控制了类的内部状态。
并且,我们给name和age属性添加了private修饰符,这样外部就不能直接操作了。你要操作name和age属性,就得去调用对应的public方法。
再举一个例子,就好比ATM机,里面的钞票属于重要信息,是私有(private)的,你无法直接看到里面有多少钱,存放在什么位置?
但是,ATM机有插卡口,出钞口,以及显示屏,这些部件就是public的方法,你通过插卡和输入密码就可以进行存取款操作。
这就是封装。
2. 如何用Java代码实现封装
就是上面的例子,分两步。
01:将属性设置为private,代表私有的。
02:设置public的get/set方法,去操作私有属性。
有快捷键可以使用,快速生成get/set方法。
在idea中:
-
选中要生成getter和setter方法的属性,右键选择Generate;
-
在Generate菜单中选择Getter和Setter;
-
勾选要生成的属性,点击OK即可生成getter和setter方法。
在eclipse中:
-
选中要生成getter和setter方法的属性,右键选择Source;
-
在Source菜单中选择Generate Getters and Setters;
-
勾选要生成的属性,点击OK即可生成getter和setter方法。
3.上一节课后作业
创建一个汽车类Car,拥有品牌brand和颜色color两个属性。分别用带参构造器和无参构造器来实例化Car类,并编写toString方法。再写一个测试类,在测试类的main方法中进行测试。
参考答案:
public class Car {
private String brand;
private String color;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
//无参构造器
public Car(){
this.brand="";
this.color="";
}
//带参构造器
public Car(String brand,String color){
this.brand=brand;
this.color=color;
}
//toString方法
public String toString(){
return "Car[brand="+brand+",color="+color+"]";
}
}
测试类:
public class CarTest {
public static void main(String[] args) {
//使用无参构造器实例化Car
Car car1 = new Car();
car1.setBrand("Bmw");
car1.setColor("White");
System.out.println(car1.toString()); //输出:Car[brand=Bmw,color=White]
//使用带参构造器实例化Car
Car car2 = new Car("Benz","Black");
System.out.println(car2.toString()); //输出:Car[brand=Benz,color=Black]
}
}
4.课后作业
要求体现封装思想:
某ATM机有一个储蓄账户,请编写一个Java类Account,要求:
(1)定义成员变量:int balance,表示账户余额;
(2)定义构造方法,初始化账户余额;
(3)定义存钱方法void deposit(int amount),入参为存入的金额,账户余额增加amount;
(4)定义取钱方法void withdraw(int amount),入参为取出的金额,账户余额减少amount,如果余额不足,则提示“余额不足”;
(5)定义查询方法int getBalance(),返回账户余额;