封装:是指隐藏对象的属性和实现细节,进对外提供公共访问方式
好处:将变化隔离。便于使用,提高重用性,提高安全性
封装原则:将不需要对外提供的额内容隐藏起来,把属性都隐藏,提供公共方法对其访问
1 package com_package2; 2 3 class Age { 4 int age; 5 /*/ public void Haha(int t) 6 //{ if(t>=0) 7 // age=t; 8 else 9 age=0; 10 } 11 // public int getHaha(int t) 12 // { 13 // return t; 14 15 // }**/ 16 void speak() 17 { 18 System.out.println("age="+age); 19 20 } 21 22 }
首先注意观察:Age类中的属性age没有说公有,也没有说私有,再加上这个类也没说是私有和公有,那么这个属性是不受保护的,创建对象后,age是可以被改动也可以被访问的
但是如果age属性变成了private那么AgeDemo是无法访问到age属性的
1 package com_package2; 2 3 public class AgeDemo { 4 public static void main(String[]args) 5 { 6 Age a = new Age();//创建对象 7 //a.Haha(20); 8 a.age=20;//访问Age类中的年龄属性 9 a.speak();//访问Age类中的speak方法 10 11 } 12 13 }
这里的age是不被保护的
再来看,要是想要访问private属性,那么,可以在中间加一个给属性赋值的public方法如下:
1 package com_package2; 2 3 class Age { 4 private int age; 5 public void Haha(int t) 6 { age=t; 7 } 8 // public int getHaha(int t) 9 // { 10 // return t; 11 12 // } 13 void speak() 14 { 15 System.out.println("age="+age); 16 17 } 18 19 }
在这里面,age是私有的其他类无法访问,但是加了一个public方法来对age属性进行赋值
1 package com_package2; 2 3 public class AgeDemo { 4 public static void main(String[]args) 5 { 6 Age a = new Age(); 7 //a.Haha(20); 8 a.Haha(20); 9 a.speak(); 10 11 } 12 13 }
通过Haha对age进行访问得到age=20
在此基础上可以增加一点算法:
1 package com_package2; 2 3 class Age { 4 private int age; 5 public void Haha(int t) 6 { if(t>=0&&t<=130) 7 age=t; 8 else 9 age=-1; 10 } 11 // public int getHaha(int t) 12 // { 13 // return t; 14 15 // } 16 void speak() 17 { 18 System.out.println("age="+age); 19 20 } 21 22 }
1 package com_package2; 2 3 public class AgeDemo { 4 public static void main(String[]args) 5 { 6 Age a = new Age(); 7 //a.Haha(20); 8 a.Haha(-20); 9 a.speak(); 10 11 } 12 13 }
这样就可以判断年龄的可能性 得-1
由此演变成get set方法:
1 package com_package2; 2 3 class Age { 4 private int age; 5 public void setAge(int t) 6 { if(t>=0&&t<=130) 7 age=t; 8 else 9 age=-1; 10 } 11 public int getAge(int t) 12 { 13 return t; 14 15 } 16 void speak() 17 { 18 System.out.println("age="+age); 19 20 } 21 22 }
1 package com_package2; 2 3 public class AgeDemo { 4 public static void main(String[]args) 5 { 6 Age a = new Age(); 7 //a.Haha(20); 8 a.setAge(-20); 9 a.speak(); 10 11 } 12 13 }
这样的演变就足以说明set,get方法的由来。通常情况下,会将类中的成员变量私有化,为了避免属性直接被访问导致数据错误,并对外界听了公共的访问方式,对该
属性进行访问,这样做的好处是:可以对属性进行可控,而对属性访问的公共方法名称规范定义的格式是:set属性(),get属性()。当然get(),set()都可以在系统中手动生成。
关于这两个方法:Java中的私有属性set()是给属性赋值的,get()是取得属性值的
被设置和存取的属性一般是私有
主要是起到封装的作用,不允许直接对属性操作
set()和get()不一定同时存在,看程序需求