📦 归档笔记 — 原创建于 WizNote,仅作归档展示;观点以当年为准,非最新。

封装和权限修饰符

创建时间2019-02-16最后修改2019-02-16原位置/程序员成长之旅/Java学习/笔记/字数1806图片/附件1
目录:程序员成长之旅/Java学习/笔记

封装就是把类的内部方法和内部属性对外不可见 并且留出对外的查询(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 //查询了名字

创建一个修改的方法也是很简单 就不演示了

以上就是封装的方法 真正的封装会比这更严谨 毕竟安全是大事.

附件