阿里云名师课堂Java面向对象开发7:private实现封装处理
Posted 溺水的情书
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里云名师课堂Java面向对象开发7:private实现封装处理相关的知识,希望对你有一定的参考价值。
目录
回顾:面向对象三大特征:封装性、继承性、多态性,封装是其中最复杂的概念,这里学习封装的基本概念。
如果想要清楚封装,首先要知道没有封装是什么情况。
范例:观察程序
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关键字。
- 可以使用private实现,不是只能使用private实现。
- 类中的属性和方法都可以使用private定义,但是通常用在属性上,很少使用在方法上。
范例:利用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定义的属性呢?
- setter方法:主要用于属性内容的设置
- 使用方法:对于
private String name ;
有public void setName(String n) {}
,注意用void,没有返回值。
- 使用方法:对于
- getter方法:主要用于属性内容的取得
- 使用方法:对于
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) ;
类的设计原则:
- 设计类的时候所有属性必须使用private封装。如果这个属性还需要被外部所使用,那么就按照定义使用setter()、getter()方法。
- 使用private封装的最大特点:只允许本类访问,而不允许外部访问。
- private只是封装的第一步,经过后续学习继承和多态才能写出真正的封装代码。
以上是关于阿里云名师课堂Java面向对象开发7:private实现封装处理的主要内容,如果未能解决你的问题,请参考以下文章