纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Java 的封装与接口 Java基础第四篇 封装与接口

Vamei   2021-09-10 我要评论
想了解Java基础第四篇 封装与接口的相关内容吗Vamei在本文为您仔细讲解Java 的封装与接口的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Java,的封装,Java的接口下面大家一起来学习吧

前言:

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

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

1、封装与接口

封装(encapsulation)是计算机常见的术语即保留有限的外部接口(interface)隐藏具体实施细节比如在Linux架构就可以看到Linux操作系统封装了底层硬件的具体细节只保留了系统调用这一套接口用户处在封装的外部只能通过接口进行所需的操作

封装在生活中很常见比如下面是一个充电电筒:

一个用户即使不看说明书也可以猜到这个电筒的操作: 开关和充电这个电筒用一个塑料壳将用户不需要接触的内部细节隐藏起来只保留了两个接口开关和电插头使用这两个接口用户足以使用该产品在设计中想要实现的功能如果所有的细节都同时暴露给用户那么用户会对产品感到不知所措 (比如下面不加壳的遥控器)因此封装提高了产品的易用性

 

如果产品不封装电筒或者遥控器的许多细节会暴露在用户面前: 电池、电路、密封的橡胶等等尽管这可以让用户更自由的对产品实施操作比如直接给电池放电取出一个LED灯等等然而用户往往要承担更大的损坏产品的风险因此封装提高了产品的安全性

 

一个Java软件产品与一个日常产品相同一个对象内部可以有许多成员(数据成员和方法)有一些数据成员和方法只是内部使用这时我们会希望有一个给对象“加壳”的机制从而封装对象这样用户可以比较容易学习和使用外部的接口而不必接触内部成员

2、对象成员的封装

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

  • public: 该成员外部可见即该成员为接口的一部分
  • private: 该成员外部不可见只能用于内部使用无法从外部访问

(protected涉及继承的概念放在以后说)

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

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

}

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

    /**
     * accessor
     */
    public int getHeight()
    {
       return this.height;
    }

    /**
     * mutator
     */
    public void growHeight(int h)
    {
        this.height = this.height + h;
    }

     /**
      * encapsulated, for internal use
      */
    private void breath()
    {
        System.out.println("hu...hu...");
    }


   /**
    * call breath()
    */
    public void repeatBreath(int rep)
    {
        int i;
        for(i = 0; i < rep; i++) {
            this.breath();
        }
    }

    private int height; // encapsulated, for internal use
}


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

外部方法只能调用public成员当我们在Human外部时比如Test中我们只能调用Human中规定为public的成员而不能调用规定为private的成员

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

  • getHeight()
  • growHeight()
  • repBreath()

我们可以将Human类及其接口表示为如下图的形式:

上图就如“加了壳的遥控器”

如果我们从main中强行调用height:

System.out.println(aPerson.height);

将会有如下错误提示:

Test.java:6: height has private access in Human
        System.out.println(aPerson.height);
                                  ^
1 error

Beep, 你触电了! 一个被说明为private的成员不能被外部调用

在Java的通常规范中表达状态的数据成员(比如height)要设置成private对数据成员的修改要通过接口提供的方法进行(比如getHeight()和growHeight())这个规范起到了保护数据的作用用户不能直接修改数据必须通过相应的方法才能读取和写入数据类的设计者可以在接口方法中加入数据的使用规范

3、类的封装

在一个.java文件中有且只能有一个类带有public关键字比如上面的Test类所以从任意其他类中我们都可以直接调用该类Human类没有关键字更早之前我们对象的成员也没有关键字这种没有关键字的情况也代表了一种可见性我将在包(package)的讲解中深入

4、总结

封装接口

private, public


相关文章

猜您喜欢

网友评论

Copyright 2020 www.sopisoft.net 【绿软下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式