转载

浅谈Java三大特性之封装

三大特性之浅谈 封装

前言

英语:Encapsulation——封装,包装。

面向对象的封装与真实世界的目的是一样的。封装能够使外部访问者不能随意存取对象的内部数据,隐藏了对象的内部细节,只保留有限的对外接口。外部访问者不用关心对象的内部细节,使得操作对象变得简单。

好处

先通过阅读下面的文字,再回来理解可能会更好一点

  1. 减少了耦合(物理学上类似相互影响的概念)
  2. 便于维护和修改
  3. 可以隐藏信息,一些具体实现代码,安全性
  4. 对成员变量精准控制

介绍(实现方式)

  1. Java 面向对象的封装性是通过对成员变量和方法进行访问控制实现的。这里就涉及到了访问控制的四个关键字了。

    类别/不同地方 同一个类 同一个包 不同包 的子类 不同包非 子类
    私有的(private) Yes No No No
    默认 Yes Yes No No
    保护的(protected) Yes Yes Yes No
    公有的(public) Yes Yes Yes Yes
  2. 封装是一种保护作用,将其变量以及方法保护起来,防止被随机访问,所以一定程度上增强了代码的安全性。

示例

  • 下面是代码示例, 私有类只能在同一个类中被访问,否则会报错。

浅谈Java三大特性之封装

private还可以防止直接访问特定的构造器(或全部的构造器)
    package music.daima.ebook;
class TestClass{
    private TestClass(){}
    static TestClass make(){
        return new TestClass();
    }
}


public class PrivateDaiMa {
    public static void main(String args[]){
//        TestClass x = new TestClass();
        TestClass x = TestClass.make();
//        不能通过构造器来创建TestClass,要通过调用make方法才可以
    }
}

报错信息说明TestClass的private将其构造器给私有化了,不能直接访问。

浅谈Java三大特性之封装

  • 访问不同包的protected方法(非子类的),先是定义在Music类中的BaoHu方法。

浅谈Java三大特性之封装

在其它包访问,就会报错,因为在Music里面这个BaoHu的方法用的是protected修饰的。

浅谈Java三大特性之封装

其实在Idea写代码时候,定义的属性之类可以在左下角有个概览,可以查看是什么类型的

浅谈Java三大特性之封装

  • 整体的test代码
import music.Music;//导入了music包的Music类


class test{
    test(int i){

        i = i + 1;

    }
    private String name;//将其变为public String name;的话下面就可以访问
    public int num=2;//公有的可以被访问
    double i = 2.2;//默认的定义,也可以被访问,在本包里面

}
public class FengZhuang {
    public static void  main(String args[]){
       test a = new test(6);
        System.out.println(a.num);
        //a.name就会报错,因为在上面的name是私有的
        Music ceshi = new Music();//导入了不同的包中的类

//        ceshi.BaoHu();报错,是在其它包里的protected方法

    }
}

小结

访问成员有两种方式:一种是调用,即通过类或对象调用它的成员,如p.printX()语句;另一种是继承,即子类继承父类的成员变量和方法。在开发使用的时候,应该尽量限制类中成员的可见性

  1. 公有访问级别任何情况下两种方式都可以;(public)

  2. 默认访问级别在同一包中两种访问方式都可以,不能在包之外访问;()

  3. 保护访问级别在同一包中与默认访问级别一样,两种访问方式都可以。但是在不同包之

    外只能继承访问;(protected)

  4. 私有访问级别只能在本类中通过调用方法访问,不能继承访问。(private)

感谢阅读!

原文  https://www.linuxidc.com/Linux/2020-01/162016.htm
正文到此结束
Loading...