你知道为什么要封装吗?

国际案例进来先点赞

说封装,咱们先说说生活中封装,比如你想买一个手机用,你只在淘宝下单就可以了,这个手机怎么生产的,里边的代码怎么写的,你不需要了解,这就是封装,也就是厂家直接把手机给你封装好,你掏钱用就可以了。其实封装性的思想,可以理解为社会分工!

1、封装性的概念

封装性是面向对象的三大特征之一封账就是隐藏实现细节,仅对外提供访问的接口。内部的具体实现细节我不关心。就和老板布置了一个任务一样,你如何苦逼的我不管,我只要结果!封装有:属性的封装,类的封装,组件的封装,模块化封装,系统级封装

2、封装的好处

  • 可以模块化,就是分工比较明确嘛,那个模块是干什么的很清楚
  • 信息隐藏
  • 代码重用 封装好了,再次调用的时候,直接去调用就行了,就不用写很多的重复代码了!
  • 插件化易于调试
  • 具有安全性 对于调用者来说是安全的,出问题了不是调用者的错,是自己的错! 封装的缺点:会影响代码的执行效率,我们是为了提高程序的可维护性,才来牺牲一点效率的还是很值得的。
<code> 

import

java.util.Arrays;

public

class

Test8

{

public

static

void

main

(String[] args)

{ Person p1=Person(); p1.name=

"菲菲"

; p1.age=

18

; } }

class

Person

{

String name;

int

age; } /<code>

这样编译和运行时完全没有问题的,我们封装一下,封装之后的代码

<code> 

import

java.util.Arrays;

public

class

Test8

{

public

static

void

main

(String[] args)

{ Person p1=Person(); p1.name=

"菲菲"

; p1.age=

18

; } }

class

Person

{

private

String name;

private

int

age; } /<code>

对你们看到的没有错,在属性前面加上private就可以了,然后我们再编译一下上边这一篇代码


你知道为什么要封装吗?

看到没,这样 就不能访问了吧,但是我又不得访问你的属性怎么办,这不矛盾吗?我门在生活中也有这样的例子,既有限制的措施,又有放的措施!比如你是外地的车牌,是不能进京的,那为什么北京又有很多外地牌子的车呢?那你得办进京证!办了进京证就可以在北京开你的小汽车了!那么我们 在代码中怎么办进京证呢?


想要在类外部访问私有属性,我们需要提供公有的访问来间接访问


<code> 

import

java.util.Arrays;

public

class

Test8

{

public

static

void

main

(String[] args)

{ Person p1=Person(); p1.setName(

"菲菲"

); p1.setAge(

18

); } }

class

Person

{

private

String name;

private

int

age;

public

void

setName

(String name)

{

this

.name=name; }

public

String

getName

()

{

return

name; }

public

void

setAge

(

int

age)

{

this

.age=age; }

public

int

getAge

()

{

return

age; } } /<code>

有的童鞋就会问了,封装前和封装后的效果不是一样吗?都是set属性啊,有什么区别呢? 我们这样写结果是一样的,但是意义是不一样的,没封装之前的意义就是我偷了你100块钱,封装之后的意义就是我找你借100块钱,这两种意义一样吗?借你钱得经过你同意的,我偷是可以不经过你同意的,如果没有封装之前,我想赋什么值就赋什么值,你没有反抗的权利,p1.name="shabi";那你就变成shabi了啊,这tm谁顶得住,我设置年龄,如果设置成负数了怎么办,如果我用set设置呢?再举个例子,是不是所有的车都可以办进京证呢?如果是黑车呢?我们在代码中就可以这样做!

<code> 

class

Person

{

private

String name;

private

int

age;

public

void

setName

(

String name

)

{

if

(

"shabi"

.

equals

(name)){

return

; }

this

.name=name; }

public

String

getName

(

)

{

return

name; }

public

void

setAge

(

int

age

)

{

if

(age>

150

||age<

0

){

return

; }

this

.age=age; }

public

int

getAge

(

)

{

return

age; } } /<code>

通常在一个类中,属性都私有化,并对外提供getter and setter 方法,这就是属性的封装!


3、成员变量和局部变量

  • 在类中的位置不同
    成员变量:在类中定义
    局部变量:在方法中定义或者方法的参数
  • 在内存中的位置不同
    成员变量:在堆内存(成员变量属于对象,对象进堆内存)
    局部变量:在栈内存(局部变量属于方法,方法进栈内存)
  • 生命周期不同

    成员变量:随着对象的创建而存在,随着对象的销毁而消失
    局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
  • 初始化值不同
    成员变量:有默认初始化值,引用类型默认为null,这个大家试一试就知道了
    局部变量:没有默认初始化值,必须定义,赋值,然后才能使用 注意: 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。代码实例:
<code>

public

class

Test8

{

public

static

void

main

(String[] args)

{ Person p1=Person(); p1.setName(“菲菲”); p1.setAge(

18

); p1.run(); } }

class

Person

{

private

String name;

private

int

age;

public

void

run

(

int

leng)

{ } /<code>
你知道为什么要封装吗?

<code>/<code>



分享到:


相關文章: