/*
- 封装的含义和作用
- 1,隐藏对象内部的复杂性,只对外公开简单的接口便于调用,从而提高系统的可扩展性,可维护性。
- 把该隐藏的隐藏起来,把该暴露的暴露出来。就是封装性设计的思想。
- 2,程序设计追求高内聚,低耦合
- 高内聚:类内部的数据操作细节在内部完成,不允许外部干涉
- 低耦合:仅对外暴露少量方法用于调用
- 4,具体情况:当创建一个类的时候,里面的成员变量可以通过“对象.属性”的方式调用赋值。
- 赋值操作会受到数据类型和范围的限制,除此以外没有其他限制。但是在实际应用中,往往需要给属性赋值做出额外
- 的限制。限制条件无法在属性声明的时候体现,可以通过方法添加限制条件。同时需要避免其他用户使用“对象.属性”
- 的方式对属性赋值。需要将属性声明为私有(private).此时针对属性便体现出封装性。
- 5,在私有化属性的同时,需要提供公共(public)的方法来对属性进行赋值(set)与访问(get)操作.
- 6,封装性的其他体现:私有方法,单例模式(私有构造器)
- 7,通过权限修饰符实现封装与隐藏。
- java中的四个权限修饰符;从小到大依次为,private,缺省(default),protected,public。
- private:类内部
- default:类内部 同一个包内
- protected:类内部 同一个包内 不同包的子类
- public: 类内部 同一个包内 不同包的子类 同一个工程下
- 修饰符写在成员变量之前
- 修饰符可以用在类及类的内部结构(属性,方法,构造器,内部类)上。类中的代码块不行
- 对于类(class)的权限修饰只能用public和default
- public类可以在任意地方访问。
- default类只能被同一个包内的类访问。
- 8,如果两个包a,b内有同名的类c,在其中一个包a内导入b.c时,创建c的对象是b.c的实例化对象,执行b.c的属性和方法。
*/
package com.atguigu.contact;
public class Object_Encapsulation {
//权限修饰符测试
public int orderPublic;//公开属性
int orderDefault;//缺省属性
private int orderPrivate;//私有属性
public void methodPublic() {
orderPublic = 1;
orderDefault = 1;
orderPrivate = 1;
methodPrivate();
}//公开方法
void methodDefault() {
orderPublic = 2;
orderDefault = 2;
orderPrivate = 2;
methodPrivate();
}//缺省方法
private void methodPrivate() {
orderPublic = 3;
orderDefault = 3;
orderPrivate = 3;
}//私有方法
/*
package com.atguigu.contact;
public class ObjectTest {//同包不同类,调用私有属性和方法报错
Object_Encapsulation o = new Object_Encapsulation();
o.orderDefault = 1;
o.orderPublic = 1;
// o.orderPrivate = 1;
o.methodPublic();
o.methodDefault();
// o.methodPrivate();
}
*/
/*
package exercise;
import java.util.*;
import com.atguigu.contact.*;//不同包不同类下,需要先导包,default属性和方法不可用
public class ObjectTest {
Object_Encapsulation o = new Object_Encapsulation();
//o.orderDefault = 1;
o.orderPublic = 1;
// o.orderPrivate = 1;
o.methodPublic();
//o.methodDefault();
// o.methodPrivate();
}
*/
public static void main(String[] args) {
rabbit rab = new rabbit();
rab.name = "007";
System.out.println(rab.name);
//rab.age;//私有属性只能在类内调用
rab.setAge(-1);
rab.setAge(32);
rab.setAge(10);
System.out.println(rab.getAge());
}
}
//创建类以测试权限修饰符
class rabbit{
//设置类的属性
String name = setName("cube");
public int weight;
private int age;
//创建方法设置私有属性
public void setAge(int i){//赋值方法有形参无返回值
if(i >= 0 && i <= 30) {//通过语句对赋值情况做限制。也可以抛出异常
}else if (i < 0) {
System.out.println("兔子还不存在");
}else {
System.out.println("兔子成精了");
}
}
//创建方法访问私有属性
public int getAge() {//获取方法无形参有返回值
return age;
}
private String setName(String s) {
return name = s;
}
void getName(){
System.out.println(name);
}
}