java面向对象基础——封装
封装的概念:
把对象的属性和功能结合作为一个独立的整体,并尽可能的隐藏对象的内部实现细节,比如在家看电视,电视机制造商把一些复杂的东西全部给封在电视机的后壳里,不让用户去更改,我们只需要按遥控器上的按钮就行了,而不需要管其内部是怎么实现的,有什么样的功能,晶体管是怎么显像的,我们都不需要管,所以简单来说,需要让用户知道的,我们就把他显示出来,不需要让用户知道的,我们就把他隐藏起来,就是封装
封装的好处
- 提高代码的安全性
- 提高代码的复用性
- “高内聚”:封装细节,便于修改内部代码,提高可维护性
- “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作
没有封装的代码出现的问题
package com.boker.oo;
public class TestPotting {
public static void main(String[] args) {
Student stu = new Student(); //创建一个学生对象
stu.age = 23333333; //给学生的年龄赋值
System.out.println(stu.age);
}
}
//学生类
class Student{
int age;
int height;
String name;
}
1. 没有被封装的属性到处都可以用
2. 年龄不可能为23333333,因为没有对属性赋值做出限制可以随意的赋值
访问修饰符
java中有四种访问修饰符,来控制哪些需要显示,哪些需要隐藏,下面是由高到低介绍四种访问修饰符
- public:公共的,公开的,当前项目下的所有类都可以访问
- protected:受保护的,当前包中的所有类和其他包中的子类都可以访问
- default:默认的,当前包中的所有类可以访问
- private:私有的,只能在自己的类中被访问
下列用一张图来表示他们的范围(√表示可以被访问):
下列是private修饰符实例:
package com.boker.oo;
public class TestPotting {
public static void main(String[] args) {
private int age;
stu.age = 23333333; // 此时私有的age被同一个类所访问
}
}
当我们要访问私有属性的时候可以写set和get方法来访问
package com.boker.oo2;
public class TestPotting{
public static void main(String[] args) {
Student stu = new Student();
stu.setAge(123);
}
}
class Student {
private int age;
//获取age属性
public int getAge() {
return age;
}
//设置age属性
public void setAge(int age) {
if(age > 0 && age <100) {
this.age = age;
}else {
System.out.println("输入不合法");
}
}
}
此时输出结果如下:
此时用户在输入年龄的时候就被添加上了限制了
注意boolean类型的是用is来赋值 如下:
package com.boker.oo2;
public class TestPotting{
public static void main(String[] args) {
Student stu = new Student();
stu.isSex();
}
}
class Student {
private int age;
private boolean sex;
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
}