Java面向对象的三大特征:封装,继承,多态。
什么是封装:顾名思义:将类的相关属性进行隐藏。只提供相关的方法,来对这些属性进行操作。
为什么明明对属性进行了隐藏,还要提供方法进行操作?
答:例如age这个属性。是一个变量,既然是变量,说明age是可以经常改变的。
既然需要改变:要么通过属性改变,要么通过方法改变。
封装的理念:希望通过方法来改变而非属性。
为什么通过方法来改变而非属性?
原因如下:看代码 如该类所示:如果仅仅是通过属性来修改。
那么容易出现:不合理的数据可以随意修改。
A a = new A();
a.age = 222222;
class A{
int age = 18;
}
解决办法1: 如下代码所示: 进行属性的校验。缺点:没有将代码的校验封装到一个方法。
导致如果有很多属性需要校验,那么导致大量的代码出现在main方法内部,不适合阅读代码。
解决方法2: 推荐使用:将类的相关属性进行隐藏。只提供相关的方法,来对这些属性进行操作。
详情见demo2
public class Demo {
public static void main(String[] args) {
//以下写法的缺点: 代码没有进行封装。 如果有很多个属性都需要修改,那么每个属性都需要大量的代码进行校验。
A a = new A();
a.age = 50;
if(a.age>100) {
System.out.println("该数据不合理");
a.age = 18;
}else {
System.out.println("该数据合理,修改成功。");
}
System.out.println("age=" + a.age);
System.out.println(a.age);
}
}
class A{
int age = 18;
}
public class Demo2 {
public static void main(String[] args) {
// 接Demo1:解决方法2: 推荐使用:将类的相关属性进行隐藏。只提供相关的方法,来对这些属性进行操作。
// 详情见demo2
//何为属性的隐藏: 通过Private修饰即可。
/*
通过权限修饰符:用来修饰类或方法或属性等
按照权限大小排序:
public :公共的 , 任何地方可以访问
protected :受保护的,仅仅在同一个包或具有继承关系下。
default(默认,缺省) :什么都不写 例如 int age = 18;
private :私有的,只在当前类下有效
*/
//由于age已经被私有化了。所以只能提供方法来对其进行操作。
//对属性修改无法就是 set/get方法: set表示赋值(修改) get取值
B b = new B();
b.setAge(22);
System.out.println(b.getAge());
}
}
class B{
private int age;
public int getAge() {
return age;
}
public void setAge(int age123) {
if(age123>100) {
System.out.println("该数据不合理");
}else {
System.out.println("该数据合理,修改成功。");
age = age123;
}
}
}
public class Demo3 {
/*
封装最常用的地方:就是在实体类。例如学生 老师 学校 桌子
实体类一般都放在:
//实体包下 com.yyzy.entity com.yyzy.pojo com.yyzy.po
如何创建一个实体类:
1.私有化声明属性
2.提供属性的set.get方法
3.提供有参和无参构造方法
4.提供toString方法 把实体类的打印:从地址改成能够看清的值
*/
public static void main(String[] args) {
Demo3 demo3 = new Demo3(1, "aa", 22);
Demo3 d = new Demo3();
System.out.println(demo3);
System.out.println(d);
}
private int id;
private String name;
private int age;
public Demo3() {
super();
}
public Demo3(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
@Override
public String toString() {
return "Demo3 [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}