封装和权限修饰符
封装就是把类的内部方法和内部属性对外不可见 并且留出对外的查询(get) 和修改(set) 来提升安全性 说到封装就不得不说到权限提示符 基本上封装只用得到private 即 仅对本类可见 以及 public 对所有人可见连个权限 全部的权限修饰符如下
" 如图所示,代表了不同的访问修饰符的访问范围,比如 private 修饰的属性或者方法,只能在当前类中访问或者使用。 默认 是什么修饰符都不加,默认在 当前类中和同一包下 都可以访问和使用 。 protected 修饰的属性或者方法,对同一包内的类和所有子类可见。 public 修饰的属性或者方法,对所有类可见。
我们可以举一个例子,比如 money,如果我们用 private 修饰代表着这是私有的,只能我自己可以使用。如果是 protected 代表着我可以使用,和我有关系的人,比如儿子也可以用。如果是 public 就代表了所有人都可以使用。 "
我们拿最开始学习构造方法的代码来改进 原代码 public class Park{//创建一个类,此时在内存中没有实例,等待调用. int age; String name; int Error; public Park(){//无参数构造器 传初始化参数在这个阶段完成 而方法只是写逻辑 不包含this.xxx=xxx这种东西. System.out.println("请出示您的身份证明!"); Error=1;//初始化阶段完成错误判断 } public Park(String name,int age){//带参数构造器,如果有带参数构造器则必须有无参数构造器. this.name=name; this.age=age; } public void register(){ if(Error!=1){//如果发现错误则无需执行以下程序 if(age>=18){ System.out.println("认证成功,欢迎你!["+name+","+age+"]"); }else{ System.out.println("对不起["+name+"],您的年龄["+age+"]不足以进入本游乐园,请满18后再来."); } }else{ System.out.println("请出示您的身份证明!"); } } public static void main(String[] args){ Park DaLi = new Park("DaLi",18);//Park 类型的DaLi 此时 内存中有了实例 DaLi.register();//此时我们可以通过Park类型的DaLi去调用Park的方法,此时实现了注册登记. Park ZhangSan = new Park("ZhangSan",16); ZhangSan.register(); Park LiSi = new Park();//这里的LiSi没有出示他的身份证明. LiSi.register();//强行注册出发错误 } }
34
1 public
class
Park { //创建一个类,此时在内存中没有实例,等待调用. 2
int
age ; 3
String
name ; 4
int
Error ; 5
public
Park (){ //无参数构造器 传初始化参数在这个阶段完成 而方法只是写逻辑 不包含this.xxx=xxx这种东西. 6
System . out . println ( "请出示您的身份证明!" ); 7
Error
1 ; //初始化阶段完成错误判断 8 } 9
public
Park ( String
name , int
age ){ //带参数构造器,如果有带参数构造器则必须有无参数构造器. 10
this . name
name ; 11
this . age
age ; 12 } 13
public
void
register (){ 14
if ( Error != 1 ){ //如果发现错误则无需执行以下程序 15
if ( age
= 18 ){ 16
System . out . println ( "认证成功,欢迎你![" + name + "," + age + "]" ); 17 } else { 18
System . out . println ( "对不起[" + name + "],您的年龄[" + age + "]不足以进入本游乐园,请满18后再来." ); 19 } 20 } else { 21
System . out . println ( "请出示您的身份证明!" ); 22 } 23 } 24
public
static
void
main ( String [] args ){ 25
Park
DaLi
=
new
Park ( "DaLi" , 18 ); //Park 类型的DaLi 此时 内存中有了实例 26
DaLi . register (); //此时我们可以通过Park类型的DaLi去调用Park的方法,此时实现了注册登记. 27
Park
ZhangSan
=
new
Park ( "ZhangSan" , 16 ); 28
ZhangSan . register (); 29 30 31
Park
LiSi
=
new
Park (); //这里的LiSi没有出示他的身份证明. 32
LiSi . register (); //强行注册出发错误 33 } 34 }
我们把所有的内部变量装换位私有
经过简单的修改后我把所有变量变成了私有 这样外部就不能随意查看和修改了 那么问题来了 我们如何查询修改这些变量呢 答案就是留出get和set方法即可 public class NewPark{//创建一个类,此时在内存中没有实例,等待调用. //将所有的成员变量更改为私有 private int age; private String name; private int Error; public NewPark(){//无参数构造器 System.out.println("请出示您的身份证明!"); Error=1;//初始化阶段完成错误判断 } public NewPark(String name,int age){//带参数构造器,如果有带参数构造器则必须有无参数构造器. this.name=name; this.age=age; } public int getAge(){//创建了查询年龄的方法 return age; } public String getName(){//创建了查询名字的方法 return name; } public void register(){ if(Error!=1){//如果发现错误则无需执行以下程序 if(age>=18){ System.out.println("认证成功,欢迎你!["+name+","+age+"]"); }else{ System.out.println("对不起["+name+"],您的年龄["+age+"]不足以进入本游乐园,请满18后再来."); } }else{ System.out.println("请出示您的身份证明!"); } } public static void main(String[] args){ NewPark DaLi = new NewPark("DaLi",18);//NewPark 类型的DaLi 此时 内存中有了实例 DaLi.register();//此时我们可以通过NewPark类型的DaLi去调用NewPark的方法,此时实现了注册登记. System.out.println(DaLi.getAge()); NewPark ZhangSan = new NewPark("ZhangSan",16); ZhangSan.register(); System.out.println(ZhangSan.getName()); } }
39
1 public
class
NewPark { //创建一个类,此时在内存中没有实例,等待调用. 2
//将所有的成员变量更改为私有 3
private
int
age ; 4
private
String
name ; 5
private
int
Error ; 6
public
NewPark (){ //无参数构造器 7
System . out . println ( "请出示您的身份证明!" ); 8
Error
1 ; //初始化阶段完成错误判断 9 } 10
public
NewPark ( String
name , int
age ){ //带参数构造器,如果有带参数构造器则必须有无参数构造器. 11
this . name
name ; 12
this . age
age ; 13 } 14
public
int
getAge (){ //创建了查询年龄的方法 15
return
age ; 16 } 17
public
String
getName (){ //创建了查询名字的方法 18
return
name ; 19 } 20
public
void
register (){ 21
if ( Error != 1 ){ //如果发现错误则无需执行以下程序 22
if ( age
= 18 ){ 23
System . out . println ( "认证成功,欢迎你![" + name + "," + age + "]" ); 24 } else { 25
System . out . println ( "对不起[" + name + "],您的年龄[" + age + "]不足以进入本游乐园,请满18后再来." ); 26 } 27 } else { 28
System . out . println ( "请出示您的身份证明!" ); 29 } 30 } 31
public
static
void
main ( String [] args ){ 32
NewPark
DaLi
=
new
NewPark ( "DaLi" , 18 ); //NewPark 类型的DaLi 此时 内存中有了实例 33
DaLi . register (); //此时我们可以通过NewPark类型的DaLi去调用NewPark的方法,此时实现了注册登记. 34
System . out . println ( DaLi . getAge ()); 35
NewPark
ZhangSan
=
new
NewPark ( "ZhangSan" , 16 ); 36
ZhangSan . register (); 37
System . out . println ( ZhangSan . getName ()); 38 } 39 } 在DaLi和ZhangSan后面分别的查询了一次年龄和名字 运行结果 认证成功,欢迎你![DaLi,18] 18 //查询了年龄 对不起[ZhangSan],您的年龄[16]不足以进入本游乐园,请满18后再来. ZhangSan //查询了名字
创建一个修改的方法也是很简单 就不演示了
以上就是封装的方法 真正的封装会比这更严谨 毕竟安全是大事.