标签:字母 std get src 其他 loading 业务 图片 基本
class Person { // 定义一个类,注意类名称每个单词首字母大写
String name ; // 属性1,表示人的姓名
int age ; // 属性2,表示人的年龄
public void info() { // 一个方法
System.out.println("name = " + name + " age = " + age) ;
}
}
public class TestDemo { // 定义一个程序类
public static void main(String args[]) {
// 类名称 对象名称 = new 类名称() ;
Person per = new Person() ;
per.name = "Dexter" ;
per.age = 180 ;
per.info() ;
}
}
可以看出程序没有语法错误,但是显然不符合逻辑(年龄180),这种错误称为业务逻辑出错。
怎么回避此类问题:
让内部的操作对外部不可见,使用private关键字。
class Person { // 定义一个类,注意类名称每个单词首字母大写
private String name ; // 属性1,表示人的姓名
private int age ; // 属性2,表示人的年龄
public void info() { // 一个方法
System.out.println("name = " + name + " age = " + age) ;
}
}
public class TestDemo { // 定义一个程序类
public static void main(String args[]) {
// 类名称 对象名称 = new 类名称() ;
Person per = new Person() ;
per.name = "Dexter" ; // 直接访问Person中name
per.age = 180 ; // 直接访问Person中age
per.info() ;
}
}
一旦属性的声明上使用了private定义之后,如果其他类直接对该属性进行访问会出现如下的错误提示:
使用private之后属性就安全了,外部无法直接操作,但是这时有了一个新问题:怎么才能访问private定义的属性呢?
private String name ;
有public void setName(String n) {}
,注意用void,没有返回值。private String name ;
有public String getName() {}
,注意用String(对应的类型),有返回值。范例:扩展Person类中的内容
class Person { // 定义一个类,注意类名称每个单词首字母大写
private String name ; // 属性1,表示人的姓名
private int age ; // 属性2,表示人的年龄
public void setName(String n) {
name = n ;
}
public void setAge(int a) {
age = a ;
}
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 per = new Person() ;
per.setName("Dexter") ;
per.setAge(180) ;
per.info() ;
}
}
这时就可以在setter中设置筛选条件,满足业务需求。如:(用这段代码替换上一段代码中的setAge)
public void setAge(int a) {
if(a > 0 && a < 120){
age = a ;
} else
age = 0 ; // 告知年龄出错
}
per.setAge(180) ;
per.setAge(20) ;
类的设计原则:
阿里云【名师课堂】Java面向对象开发7:private实现封装处理
标签:字母 std get src 其他 loading 业务 图片 基本
原文地址:https://www.cnblogs.com/playerone/p/13059978.html