面向对象的三个重点:封装、继承和多态
概念:把抽象出的数据(属性)和对数据的操作(方法)封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(方法),才能对数据进行操作。
比如,对电视机的操作就是典型的封装
理解和好处:
1.隐藏实现细节:调用写好的方法就行
2.可以对数据进行验证,保证安全性
封装的实现:
1.将属性进行私有化(不能直接修改属性)
2.提供一个公共的(public)set用于对属性判断并赋值
public void setxxx(类型 参数名){//xxx表示某个属性
//加入验证的业务逻辑
属性=参数名;
}
3.提供一个公共的(public)get方法,用于获取属性的值
public 数据类型 getxxx(){//权限判断,xxx某个属性的值
return xxx;
}
练习:
总结:
1.两个快捷键的使用
2.用set和get方法对private的属性进行操作
可以增加权限的判断,增加业务逻辑
package com.stu;public class encapsulation01 {/*那么在iava中如何实现这种类似的控制呢?请大家看一个小程序(Encapsulation01.java),不能随便査看人的年龄,工资等隐私,并对设置的年龄进行合理的验证。年龄合理就设置,否则给默认年龄,必须在 1-120,年龄, 工资不能直接査看, name的长度在 2-0字符。之间*/public static void main(String[] args) {Person person = new Person();person.setName("jack00000");person.setAge(300);person.setSalary(30000);System.out.println(person.info());//这里是输出返回的字符串}
}class Person{public String name;//名字公开private int age;//age私有化private double salary;//..//自己手写get和set方法太慢,我们可以使用快捷键//alt+insert//运行快捷键:alt+u+upublic void setName(String name){//限制:名字在2~6个字符//相当于增加了业务逻辑if(name.length()>=2&&name.length()<=6){this.name = name;}else {System.out.println("名字的长度不对,需要默认名字");this.name="无名人";}}public String getName(){return name;}public int getAge() {return age;}public void setAge(int age) {//限制:年龄在1~120if(age>=1&&age<=120){this.age = age;}else {System.out.println("你设置的年龄不对,年龄需要在1~120,给默认年龄18");this.age=18;}}public double getSalary() {//增加对当前对象的权限判断return salary;}public void setSalary(double salary) {this.salary = salary;}//在返回字符串这里,我一开始有点懵了public String info(){return "信息为 name=" + name + " age=" + age + " salary=" + salary;}
}