Java入门 第二季第二章 封装

这是我学习慕课网Java课程的笔记,原视频链接为:http://www.imooc.com/learn/124

面向对象三大特性:封装、继承、多态

2-1 什么是Java中的封装

 ★  概念
        将类的某些信息 隐藏在类内部,不允许外部程序直接访问,而是通过   该类提供的方法  来实现 对隐藏信息的操作和访问
 ★  好处
        a.只能通过规定的   方法  访问数据
        b. 隐藏  类的实例 细节,方便修改和实现
 ★  封装的实现步骤
Java入门 第二季第二章 封装_第1张图片

2-2 使用 包 管理 Java 中的类

  包的作用
        a.管理Java文件
        b.解决同名文件冲突
  定义包:package 包名
        注:必须放在Java源程序的第一行
               包名间可以使用“ . ”号隔开(层次关系)
               eg:com.immoc.MyClass

        例如:音乐类——MyClassMusic
                   -music
                   com.imooc.music.MyClassMusic
                   -movie
                   com.imooc.movie.MyClassMusic
  系统中的包
         java.(功能).(类)
        eg: java.lang.(类) 包含java语言基础的类
                java.util.(类) 包含java语言中各种工具类
                java.io.(类) 包含输入、输出相关功能的类
  包的使用
        a. 可以通过  import关键字,在某个文件中使用其他文件中的类
                import com.imooc.music.MyClass
        b. Java中, 包的命名规范是全小写字母拼写
        c. 使用的时候不但可以加载某个包下的所有文件
                eg:com.imooc.*         其中 “ * ” 表示所有文件
            也可以加载某个具体子包下的所有文件
                eg:com.imooc.music.*

2-3 Java 中的访问修饰符

访问修饰符——可以修饰属性和方法的访问范围

 访问修饰符的总结
Java入门 第二季第二章 封装_第2张图片

                形象化类比系列图
            
            图:类的属性和方法 —— 人的钱
Java入门 第二季第二章 封装_第3张图片

图:private —— 锁在保险柜里,只有自己可以用


图:默认 —— 同一个屋檐下的人可以使用


 图:protected —— 跟我有关系的也可以使用
Java入门 第二季第二章 封装_第4张图片

    图:public —— 所有人都可以使用
Java入门 第二季第二章 封装_第5张图片

2-4 Java 中的 this 关键字

 this关键字代表当前对象
        this.属性 操作当前对象的属性
        this.方法 调用当前对象的方法

 封装对象的属性的时候,经常会使用 this 关键字

         Eclipse提供了自动生成 getter 和 setter 的功能,步骤:

        Step 1:点击Source,选择 Generate Getters and Setters
Java入门 第二季第二章 封装_第6张图片

                      Step 2:选择要生成的方法,点击 确定
Java入门 第二季第二章 封装_第7张图片

                        效果图:this关键字 避免了变量重名导致的混乱
Java入门 第二季第二章 封装_第8张图片

2-5 什么是 Java 中的内部类

内部类(Inner Class)就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为  外部类

 内部类的主要作用
        a. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内, 不允许同一个包中的其他类访问该类
        b.   内部类的方法可以直接访问外部类的所有数据,包括私有的数据
        c. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
 内部类的种类
        成员内部类
        静态内部类
        方法内部类
        匿名内部类

                                                                 图:示例
Java入门 第二季第二章 封装_第9张图片


2-6 Java 中的 成员内部类

内部类中最常见的就是成员内部类,也称为普通内部类。

我们来看如下代码:


运行结果为:


从上面的代码中我们可以看到,成员内部类的使用方法:
 Inner 类定义在 Outer类的内部,相当于 Outer类 的一个成员变量的位置
    Inner类 可以使用任意访问控制符,如 public、protected、private等
 Inner 类中定义的 test() 方法可以直接访问 Outer类中的数据,而不受访问控制符的影响,如直接访问 Outer类中的私有属性 a
 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,
        即:内部类 对象名 = 外部类对象.new 内部类();
 编译上面的程序后,会发现产生了两个 .class 文件

其中,第二个是外部类的 .class 文件,第一个是内部类的 .class文件,即成员内部的 .class 文件总是这样:外部类名$内部类名.class

另外,
 外部类是不能直接使用内部类的成员和方法
Java入门 第二季第二章 封装_第10张图片

可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。

                                            图:修正版
Java入门 第二季第二章 封装_第11张图片

②如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法。
     如果要访问外部类的成员变量,可以使用 this 关键字。


运行结果:


我的进一步探究:

探究1:
Java入门 第二季第二章 封装_第12张图片
编译器会报错:


探究2:


运行结果:


2-7 Java 中的 静态内部类

静态内部类是 static 修饰的内部类,这种内部类的特点是:
  静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问
 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员
 创建静态内部类的对象时,不需要外部类的对象,可以直接创建   内部类 对象名 = new 内部类();


运行结果 :


我的进一步探究:
Java入门 第二季第二章 封装_第13张图片

运行结果:


2-8 Java 中的 方法内部类

方法内部类 就是 内部类 定义在 外部类 的方法中方法内部类只在该方法的内部可见,即只在该方法内可以使用。


一定要注意哦:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符


你可能感兴趣的:(java)