面向对象的三大特性
封装
将数据(属性)和功能(方法)包装在一起,形成一个不可分割的整体。对使用者提供访问的接口(方法的调用)另一种简单的说法是,将属性私有化,对外提供公共的getter和setter方法
使用封装的优势:安全(屏蔽非法操作,隐藏类的实现细节)
实例:package characteristic.encapsulation;
/**
* 用于演示封装
* 类中封装了属性和方法
* @author 学霸联盟 - 赵灿
*/
public class Person {
//私有的属性年龄
private int privateAge;
//公共的属性年龄,用于和私有年龄做对比
public int publicAge;
//设置私有年龄,该方法对属性privateAge进行了封装
public void setPrivateAge(int age) {
if(age < 0){
System.out.println("输入的年龄有误!");
} else {
privateAge = age;
}
}
//获取私有的年龄
public int getPrivateAge() {
return privateAge;
}
}
package characteristic.encapsulation;
/**
* 测试封装
* @author 学霸联盟 - 赵灿
*/
public class Test {
public static void main(String[] args) {
//创建Person类的对象
Person p = new Person();
//设置公有的年龄
p.publicAge = -1;
//输出公有的年龄
System.out.println("公有的年龄:" + p.publicAge);
//设置私有的年龄
p.setPrivateAge(-1);
//输出私有的年龄
System.out.println("私有的年龄:" + p.getPrivateAge());
}
}
运行结果:
公有的年龄:-1
输入的年龄有误!
私有的年龄:18
其实方法也可以看成类内部的一种封装,将事项某个功能的一些列代码封装到一个方法中,方法名就是方法提供给外界使用的接口。这样就实现了代码的复用(重复的使用),当有多处需要同样功能代码的时候,就可以重复的调用这一方法
/** * 演示输出人员的姓名和年龄信息哪种简单就不用我说了吧
* @author 学霸联盟 - 赵灿
*/
public class Demo {
public static void main(String[] args) {
Person p1 = new Person("张三", 18);
Person p2 = new Person("李四", 20);
/**************** 方式一:直接输出两个对象的姓名的年龄 *******************/
System.out.println("----------方式一----------");
System.out.println("姓名:" + p1.name + " 年龄:" + p1.age);
System.out.println("姓名:" + p2.name + " 年龄:" + p2.age);
/**************** 方式二:调用输出信息的方法输出两个对象的姓名和年龄 *******************/
System.out.println("----------方式二----------");
p1.printInfo();
p2.printInfo();
}
}
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void printInfo() {
System.out.println("姓名:" + name + " 年龄:" + age);
}
}
运行结果:
----------方式一----------
姓名:张三 年龄:18
姓名:李四 年龄:20
----------方式二----------
姓名:张三 年龄:18
姓名:李四 年龄:20
封装的优势在于复用代码,安全性,隐私性等