关于Java你不得不了解面向对象程序三大特性之 封装性

前言

正文

一.何为封装

二. 访问限定符

结语



前言

面向对象编程(Object-Oriented Programming, OOP)已经成为了主流的编程范式之一。面向对象程序主要有Java、Python、C++和C语言等等。

面向对象程序三大特性:封装、继承、多态。这些特性使得程序具有更好的可维护性、可扩展性和可重用性。

本文使用Java对面向对象编程语言三大特性之一 封装性 进行解析。

正文

一.何为封装

在Java类和对象阶段,主要研究的就是封装特性。

何为封装呢?简单来说就是:

套壳屏蔽细节,将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。

比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器,USB插孔等,让用户来和计算机进行交互,完成日常事务。

但实际上:电脑真正工作的却是CPU、显卡、内存等一些硬件元件。

对于计算机使用者而言,不用关心内部核心部件,比如主板上线路是如何布局的,CPU内部是如何设计的等,用户 只需要知道,怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。

因此计算机厂商在出厂时,在外部套上壳子,将内部实现细节隐藏起来,仅仅对外提供开关机、鼠标以及键盘插孔等,让用户可以与计算机进行交互即可。

比如:

此时name和age都用public修饰,在类外可以实例化对象然后 “ .name ”进行赋值

但是如果我想保证name和age的隐私,不想让别人在类外知道我这两个属性,就要把public改成private。

如下图,此时再像上图一样调用属性就会报错(使用 "person." 调用也在列表中看不见两个属性),就相当于给属性套了个壳子,将其封装起来,使在类外无法看到这个属性,体现了封装性

(类内是指Person类,而类外是指Person以外的类,如Test类

如果还想给对象赋值,可以使用public修饰的有参构造

同时,private也能用来修饰方法。如下图,当改成private后,有参构造就不能在类外使用了,这意味着此时构造方法只能在类内使用(Person类),而类外无法使用了。

这也体现了封装性

所以我们也可以这么说:

封装: 从语法上来说就是被private 修饰的成员变量或者成员方法只能在当前类当中使用

那封装了属性和方法后我们就不能给对象赋值了吗?

不,正如前文所说,我们可以结合操作数据的方法进行赋值

我们可以使用Get和Set方法 

如图,成功打印,因此,当我们使用封装时,我们可以用Get和Set方法对对象数据进行操作

以下是:快捷键操作

(IDEA快捷键  Alt + Insert)

(然后Ctrl+A全选确定即可快速生成Get和Set方法)

二. 访问限定符

Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用

而封装的使用离不开访问修饰符之一private的修饰。

Java中提供了四种访问限定符:

No范围privatedefaultprotectedpublic
1同一个包中的同一类 
2同一个包中的不同类

3不同包中的子类
4不同包中的非子类

public      :可以理解为一个人的外貌特征,谁都可以看得到

default    :对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了

private    :只有自己知道,其他人都不知道

protected:对子类相当于公开(public),对不是同一包中的没有父子关系的类相当于私有                                (private)

【说明】

protected主要是用在继承中

default权限指:什么都不写时的默认权限

访问权限除了可以限定类中成员的可见性,也可以控制类的可见性   

public class Computer {
    private String cpu; // cpu
    private String memory; // 内存
    public String screen; // 屏幕
    String brand; // 品牌---->default属性

public Computer(String brand, String cpu, String memory, String screen)
 {
    this.brand = brand;
    this.cpu = cpu;
    this.memory = memory;
    this.screen = screen;
 }

public void Boot(){
    System.out.println("开机~~~");
  }

public void PowerOff(){
    System.out.println("关机~~~");
  }

public void SurfInternet(){
    System.out.println("上网~~~");
  }
}
public class TestComputer {
  public static void main(String[] args) {
    Computer p = new Computer("HW", "i7", "8G", "13*14");
    System.out.println(p.brand);  // default属性:只能被本包中类访问
    System.out.println(p.screen); // public属性: 可以任何其他类访问
  //System.out.println(p.cpu);    // private属性:只能在Computer类中访问,不能被其他类访问
   }
}

结语

以上就是面向对象语言三大特性之一封装性的讲解,其中学习访问限定符能更好地帮助我们理解封装,接下来我将逐步发布关于其他两大特性的讲解,敬请关注,谢谢!

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值