美文网首页
封装与接口

封装与接口

作者: SingleDiego | 来源:发表于2018-03-08 09:16 被阅读7次

总结之前的内容,对象(object)指代某一事物,(class)指代对象的类型。对象可以有状态和动作,即数据成员和方法。

到现在为止,数据成员和方法都是同时开放给内部和外部的。在对象内部,我们利用 this 来调用对象的数据成员和方法。在对象外部,比如当我们在另一个类中调用对象的时,可以使用 对象.数据成员对象.方法() 来调用对象的数据成员和方法。

我们将要 封装(encapsulation)对象的成员(成员包括数据成员和方法),从而只允许从外部调用指定部分的成员。利用封装,我们可以提高对象的易用性和安全性。




对象成员的封装

Java 通过三个关键字来控制对象的成员的 外部可见性(visibility): publicprivateprotected

  • public:该成员外部可见,即该成员为接口的一部分
  • private:该成员外部不可见,只能用于内部使用,无法从外部访问。
  • (protected涉及继承的概念,放在以后说)

我们先来封装以前定义的 Human 类:

class Human 
{
    Human(int h)
    {
        this.height = h;
        System.out.println("I'm born");
    }

    public int getHeight() // 公共方法
    {
       return this.height;
    }

    public void growHeight(int h) // 公共方法
    {
        this.height = this.height + h;
    }

    private void breath() // 私有方法
    {
        System.out.println("hu...hu...");
    }

    public void repeatBreath(int rep) // 公共方法
    {
        int i;
        for(i = 0; i < rep; i++) {
            this.breath();
        }
    }

    private int height; // 私有变量
}


public class Test
{
    public static void main(String[] args)
    {
        Human aPerson = new Human(160);
        System.out.println(aPerson.getHeight());
        aPerson.growHeight(10);
        System.out.println(aPerson.getHeight());
        aPerson.repeatBreath(5);
    }
}

输出结果:

I'm born
160
170
hu...hu...
hu...hu...
hu...hu...
hu...hu...
hu...hu...

内部方法并不受封装的影响。Human 的内部方法可以调用任意成员,即使是设置为 privateheightbreath() 都可被调用。

外部方法只能调用 public 成员。当我们在 Human 外部时,比如 Testmain() 函数中,我们只能调用 Human 中规定为 public 的成员,而不能调用规定为private的成员。

如果我们强行调用 aPerson.breath();aPerson.height,编译时候都会报错。

通过封装,Human类就只保留了下面几个方法作为接口:

getHeight()
growHeight()
repBreath()

相关文章

  • 封装与接口

    总结之前的内容,对象(object)指代某一事物,类(class)指代对象的类型。对象可以有状态和动作,即数据成员...

  • SpringBoot的AOP面向切面

    1.前言 遇到任务要求:针对接口封装,所有的接口都要进行封装,并记录接口的调用次数,接口调用的成功与失败error...

  • Java基础教程之实现接口

    Java基础教程之实现接口 在封装与接口中,private关键字封装了对象的内部成员。经过封装,产品隐藏了内部细节...

  • 如何封装IOS的原生UI组件给RN使用

    封装原生的UI组件,与封装原生的接口组件不一样,封装原生的接口组件请参考另一篇文章: https://www.ji...

  • Kotlin之Retrofit的使用

    前言 原计划是将Retrofit封装便于项目调用接口,无奈我所调用的接口返回结构过于复杂,要想将封装做到完善必须与...

  • axios封装

    1、封装axios 2、对请求做封装,具体怎么来封装,根据自己的接口来 3、接口 4、调用

  • vue+axios简易封装http请求

    接口封装

  • iOS架构篇-3 网络接口封装

    iOS架构篇-3 网络接口封装 关键字:iOS,网络接口封装,Alamofire,swift 网络接口API通常都...

  • [进阶]C++: 类(2)

    访问控制与封装 我们虽然为类定义了接口,但并没有任何机制强制用户使用这些接口。我们没有对类进行封装。用户可以直达S...

  • 设计模式总结

    1、模式依赖基础与原则 1.1、基础 抽象,封装,多态,继承 1.2、原则 封装变化,多用组合、少用继承,针对接口...

网友评论

      本文标题:封装与接口

      本文链接:https://www.haomeiwen.com/subject/bawjfftx.html