业务逻辑错误。
如age数值不合理。
利用private实现封装,最大的特征是,只允许本类访问,而不允许外部访问。
很少在方法上使用private。
对于private的属性,需要使用:
setter方法:主要用于进行属性内容的设置;
getter方法:主要用于属性内容的取得。
类的设计原则:
在编写类的时候,类中的所有属性必须使用private封装。而private封装的属性如果需要被外部所使用,那么就要按照格式定义相应的setter、getter方法。
业务逻辑错误。
如age数值不合理。
利用private实现封装,最大的特征是,只允许本类访问,而不允许外部访问。
很少在方法上使用private。
对于private的属性,需要使用:
setter方法:主要用于进行属性内容的设置;
getter方法:主要用于属性内容的取得。
类的设计原则:
在编写类的时候,类中的所有属性必须使用private封装。而private封装的属性如果需要被外部所使用,那么就要按照格式定义相应的setter、getter方法。
private int age;
public void setAge(int n){
if(n>=0&&n<=150){
age=n;
}else{
age=0;
}
}
public int getAge(){
return age;
}
类的设计原则:
类中的所有属性必须使用private封装
private只允许本类访问,而不允许外部访问。
如何使内部数据外部不可见,使用private实封装
类的设计原则:必须使用封装,如果需要对封装的对象进行操作,则需要对封装对象提供getter和setter方法
private实现封装的最大特征是只允许本类访问而不允外部类访问。
如果没有封装: 业务逻辑出错
让用户不能直接操作类的敏感内容
如何让内部操作让外部不可见!!!
private封装:只允许本类使用,不允许其他类使用。
private
很少在方法用private修饰
private后,属性安全了。 外部不能访问了
setter方法 用来设置private的属性
getter方法 用来得到private的属性
不管用不用,都要有setter,getter
public void set***(数据类型 变量){
。。。;
}
类的设计原则:
设计类的时候,类中的所有属性必须使用private封装。
而是用private封装的属性如果需要被外部使用,那就按照格式定义相应的setter和getter
1.如果要进行private的私有访问,按照Java的设计原则,我们可以使用setter、getter方法:
setter方法:主要用于进行属性内容的设置:
- private String name:public void setName(String n);
getter方法:主要用于属性内容的取得:
- private String name:public String getName();
2。类的设计原则:类中的所有属性必须使用private封装,再定义setter或者getter方法访问其封装的属性。
private(私有)实现封装处理
面向对象之中有三大主要特征:封装,继承,多态,对于封装是整个java中最复杂的概念,而此次所讲的内容也不过是封装中的基本概念而已。
要想清楚封装,首先必须清楚如果没有封装会怎样。
范例:观察如下的一个程序
//观察如下程序
class Person{//定义一个类,类名称要求首字母大写
String name;
int age;
public void info() {
System.out.println("name = "+ name + ",age = " + age);
}
}
public class Class5{
public static void main(String args[]) {
//类名称 对象名称 = new 类名称();
Person per1 = new Person();//声明一个新的对象
per1.name = "wangkai";
per1.age = -230;
per1.info();
}
}
这个程序实际上是不会出现任何的语法错误的,因为从int型的数据保存范围来讲,是允许保存有负数的。但是不会有一个人的年龄是-230,那么这个时候也就证明这个时候属于业务逻辑出错。
此时如果要想回避此类问题,那么首先要解决的就是如何可以让对象不能够直接操作年龄的属性,或者说是如何让类的外部不能够操作类中的敏感内容。所以此时解决问题的核心概念就在于:如何让内部的操作对外部不可见,此时就可以使用private关键字来实现。
范例:利用private来实现封装
//用private实现封装
class Person1{//定义一个类,类名称要求首字母大写
private String name = "wangkai";
private int age = 23;
public void info() {
System.out.println("name = "+ name + ",age = " + age);
}
}
public class Class6{
public static void main(String args[]) {
//类名称 对象名称 = new 类名称();
Person1 per1 = new Person1();//声明一个新的对象
per1.info();
}
}
类中的属性和方法上都可以使用private定义,但是大部分情况下很少会在方法上使用private。一旦属性的声明上使用了private定义之后,那么如果其他类直接进行该属性访问的时候就将出现如下的错误提示:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The field Person2.name is not visible
The field Person2.age is not visible
此时使用了private声明之后属性安全了,外部无法直接操作了,但是新的问题又来了。那么如果现在要想进行private私有属性的访问,按照java是设计原则就可以使用setter,getter访问:
//setter,getter
class Person8{//定义一个类,类名称要求首字母大写
private String name = "wangkai";
private int age = 23;
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 Class8{
public static void main(String args[]) {
//类名称 对象名称 = new 类名称();
Person8 per1 = new Person8();//声明一个新的对象
per1.setName("wangkai");
per1.setAge(23);
per1.info();
}
}
如果说现在非要进行检测,那么可以在setter里面完成。
范例:setter检测数据
//可以在setter里面检测数据是否符合要求
class Person9{//定义一个类,类名称要求首字母大写
private String name = "wangkai";
private int age = 23;
public void setName(String n) {
name = n;
}
public void setAge(int a) {
if(a > 0 && a < 150) {
age = a;
}else {
age = 0;
}
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void info() {
System.out.println("name = "+ name + ",age = " + age);
}
}
public class Class9{
public static void main(String args[]) {
//类名称 对象名称 = new 类名称();
Person9 per1 = new Person9();//声明一个新的对象
per1.setName("wangkai");
per1.setAge(160);
per1.info();
}
}
类的设计原则: