面向对象三大特性:封装性、继承性、多态性,封装性是java中最复杂的概念。
没有封装:
范例:
class Person{
String name;
int age;
public void info(){
System.out.println("name =" + name + ",age = " + age);
}
}
public class TestDemo{
public static void main(String args[]){
//类名称 对象名称 = new 类名称()
Person pr = new Person();
pr.name = "张三";
pr.age = -200; //此时不会出现任何语法错误,业务逻辑出错
pr.info();
}
}
此时,出现了业务逻辑错误,此时回避此类问题,对象不能直接操作属性数据或者类的外部不能修改类中的敏感数据。所以解决问题的核心关键类内部的操作是外部不可见的,此时可以利用private关键字来实现。
类中的属性和方法都可以使用private修饰。属性的声明使用了private修饰时,外部类在再进行属性值的改变,会报语法错误。
范例:
class Person{ //定义一个类,类名称每个单词的首字母要求大写
private String name; //表示人的姓名
private int age;
public void info(){
System.out.println("name =" + name + ",age = " + age);
}
}
public class TestDemo{
public static void main(String args[]){
//类名称 对象名称 = new 类名称()
Person pr = new Person(); //实例化对象
pr.name = "张三"; //设置对象的属性
pr.age = -200; //设置对象的属性
pr.info();
}
}
上述程序,会报语法错误。
类内部属性使用private修饰后,属性安全,外部无法直接访问,但是按照java的设计原则,想要访问类的私有属性,可以使用setter、getter方法。
setter方法:主要用于属性内容的设置。
public void setName(String)
getter方法:主要用于属性内容的获得。
public void getName()
范例:
class Person{
String name;
int age;
//无论是否使用,setter和getter方法都应该写
public void setName(String n){
name = n;
}
public void setAge(int a){ //可以在setter方法中做一个检测
if(a>=0&&a<250){
age = a;
}
age = 0;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public void info(){
System.out.println("name =" + name + ",age = " + age);
}
}
public class TestDemo{
public static void main(String args[]){
//类名称 对象名称 = new 类名称()
Person pr = new Person();
pr.setName("张三");
pr.setAge(-200);
pr.info();
}
}
类的设计原则:
以后在编写类的时候,类中所有属性必须使用private封装。而使用private封装的属性如果需要被外部使用按照格式定义setter和getter方法。
private实现封装的最大特征,只允许本类使用,不允许外部使用。