zoukankan      html  css  js  c++  java
  • 第8章 Java类的三大特性之一:封装

     

    1.什么是封装

    1.1概念

    将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。主要是类的属性

    1.2好处

    a.只能通过规定的方法访问数据
    b.隐藏类的实例细节,方便修改和实现

    1.3封装的实现步骤

    1.修改属性的可见性:

    设为private

    2.创建getter/setter方法

    用于属性的读写

    3.在getter/setter方法中加入属性控制语句

    对属性值的合法性进行判断

     1 public class HelloWorld{
     2     private String name = "rocco";
     3     private int age = 18;
     4     //属性赋值
     5     public void setName(String name) {
     6         this.name = name;
     7     }
     8     //属性值查询
     9     public int getAge() {
    10         return age;
    11     }
    12 
    13     public static void main(String[] args) {
    14         HelloWorld hello = new HelloWorld();
    15         System.out.println(hello.getAge());
    16 
    17 
    18     }
    19 }

    2.如何使用包管理Java中的类

    1.包的作用:

    管理Java文件
    解决同名文件冲突

    2.定义包:package包名

    注:必须放在Java源程序的第一行,包名间可以使用”.”号隔开
    eg:com.imooc.MyClass

    3.系统中的包

    java.(功能).(类)
    java.lang.(类) 包含java语言基础的类
    java.util.(类) 包含java语言中各种工具类
    java.io.(类) 包含输入、输出相关功能的类

    4.包的使用

    (1)可以通过import关键字,在某个文件使用其他文件>中的类
    import com.imooc.music.MyClass
    (2)java中,包的命名规范是全小写字母拼写
    (3)使用的时候不但可以加载某个包下的所有文件
    eg:com.imooc.
    也可以加载某个具体子包的所有文件
    eg:com.imooc.mudic.

    3.Java中的访问修饰符

    1.什么是访问修饰符
    访问修饰符是用来限制类属性和方法的访问范围的
    2.有哪些访问修饰符
    常见的访问修饰符有4中,包括一个什么都不写,缺省的状态:private,默认,proteccted, public
    3.修饰符的访问限制

    4.this关键字

    1.this关键字代表当前对象
    this.属性 操作当前对象的属性
    this.方法 调用当前对象的方法
    注意是当前对象哦
    2.封装对象的属性的时候,经常会使用this关键字

    5.什么是Java中的内部类

    1.什么是内部类:
    将一个类定义在另一个类里面,既是在一个类里面再定义一个类,此时,外面的类叫外部类,里面的类叫内部类
    2.内部类的作用:
    a.内部类提供更好的封装,这样就允许同一个包中的其他类访问这个内部类
    b.内部类可以直接调用外部类的去所有数据,包括私有数据
    c.外部类也可以实现同样的功能,但是使用内部类更方便一些
    3.内部类有几种:

    成员内部类 静态内部类
    方法内部类 匿名内部类

     1 //外部类HelloWorld
     2 public class HelloWorld {
     3 
     4     // 内部类Inner,类Inner在类HelloWorld的内部
     5     public class Inner {
     6 
     7         // 内部类的方法
     8         public void show() {
     9             System.out.println("welcome to imooc!");
    10         }
    11     }
    12 
    13     public static void main(String[] args) {
    14 
    15         // 创建外部类对象
    16         HelloWorld hello = new HelloWorld();
    17         // 创建内部类对象
    18         Inner i = hello.new Inner();
    19         // 调用内部类对象的方法
    20         i.show();
    21     }
    22 }

    6.Java中的成员内部类

    成员内部类是最常用的内部类,这个类通常放在类中变量的位置,所以叫做成员内部类
    成员内部类的使用方法:
    1.成员内部类可以访问外部类的任意访问控制符,如:public,protected,public等
    2.内部类可以直接访问外部类中的数据,外部类一个变量name,内部类调用直接就是name
    3.实例化内部类的方法不一样,需要使用外部类.new方法:内部类 对象名 = 外部类对象.new 内部类()
    就是说需要先创建一个外部类对象,然后根据外部类对象.new 来创建内部类
    4.编译之后有两个.class文件
    外部类的编译文件Outer.class
    内部类的编译文件Outer$Inner.class
    另外需要注意的地方:
    1.内部类能直接调用外部类的数据,但是外部类不能直接调用内部类的数据,需要先创建一个内部类对象,然后通过对象调用
    Outer o = new Outer();
    Inner i = o.new Inner();
    2.当内部类和外部类有相同的属性或者方法时,内部类默认会调用内部类的属性和方法,如果是调用外部类,需要这样调用:Outer.this.name,内部内还是直接用name调用

    7.Java中的静态内部类

    静态内部类是在内部类前加static修饰,这种内部类的特点是:
    1.内部静态类不能直接访问外部的非静态数据,如果需要访问外部数据,可以使用

    new 外部类().成员

    的方法来访问外部非静态成员,如果是外部静态成员,可以直接访问的
    2.如果存在外部静态成员和内部静态成员,则需要通过”类名.静态成员”来访问。如果要访问外部或者内部的静态成员,只需要直接调用成员的名字就可以了
    3.创建内部静态类的对象的时候,不需要额外创建外部类的对象,可以直接通过

    内部类 对象名 = new 内部类();

    8.Java中的方法内部类

    什么是方法内部类呢?
    就是这个内部类是在外部类的一个方法中定义的,定义之后,这个内部类就属于这个方法的私有类,就只能在这个方法中调用,出了这个方法,在任何地方都不能调用,即使是在同一个类中
    例子:

     1 //外部类
     2 public class HelloWorld {
     3 
     4     private String name = "爱慕课";
     5 
     6     // 外部类中的show方法
     7     public void show() { 
     8         // 定义方法内部类
     9         class MInner {
    10             int score = 83;
    11             public int getScore() {
    12                 return score + 10;
    13             }
    14         }
    15 
    16         // 创建方法内部类的对象
    17         MInner mi = new MInner();
    18 
    19         // 调用内部类的方法
    20         int newScore= mi.getScore();
    21 
    22         System.out.println("姓名:" + name + "
    加分后的成绩:" + newScore);
    23     }
    24 
    25     // 测试方法内部类
    26     public static void main(String[] args) {
    27 
    28         // 创建外部类的对象
    29         HelloWorld mo = new HelloWorld();
    30 
    31         // 调用外部类的方法
    32         mo.show();
    33     }
    34 }
  • 相关阅读:
    Harbor1.5.2批量清理无效镜像
    前端私服地址修改
    Paxos算法
    缓存淘汰算法--LRU算法
    一致性哈希
    mysql常见知识点总结
    mysql分库分表(二)
    mysql分库分表(一)
    dubbo学习小结
    dubbo超时重试和异常处理
  • 原文地址:https://www.cnblogs.com/cenyu/p/6068842.html
Copyright © 2011-2022 走看看