JAVA(8)封装

2019-12-05  本文已影响0人  月圆星繁

封装

面向对象的特性:

封装、继承、多态

封装概念:

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

好处:

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

封装的实现步骤:

修改属性的可见性:设为 private
创建getter/setter方法:用于属性的读写
getter/setter方法中加入属性控制语句:对属性值的合法性进行判断

Java中的包

包的作用:

定义包:
系统中的包

java.(功能).(类)

包的使用
java中的访问修饰符
访问修饰符 本类 同包 子类 其他
private y --- --- ---
默认(什么修饰符都不加 y y --- ---
protected y y y ---
public y y y y
java中的this关键字

Java 中的内部类

// 外部类HelloWorld
public class HelloWorld {
    
    // 内部类inner,在HelloWorld类的内部
    public class Inner{
        
        // 内部类的方法
        public void show() {
            System.out.println("内部类的方法");
        }
            
    }
    
    public static void main(String[] args) {
        // 创建外部类对象
        HelloWorld hello = new HelloWorld();
        
        // 创建内部类对象
        Inner in = hello.new Inner();
        
        // 调用内部类对象的方法
        in.show();
    }   
}
Java 中的成员内部类

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

package com.day01;

// 外部类
public class Outer {

    private int a = 199;  // 外部类的私有属性
    
    // 内部类Inner
    public class Inner {
        int b = 2;
        public void test() {
            System.out.println("访问外部类中的a"+ a);
            System.out.println("访问外部类中的b"+ b);
        }
    }
    
    public static void main(String[] args) {
        Outer ou = new Outer(); // 创建外部对象
        Inner in = ou.new Inner(); // 使用外部类对象创建内部类对象
        in.test(); // 调用内部对象的test方法
    }
}
成员内部类的使用方法:

1、 Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等

2、 Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,如直接访问 Outer 类中的私有属性a

3、 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );

4、 编译上面的程序后,会发现产生了两个 .class 文件(第二个是外部类的 .class 文件,第一个是内部类的 .class 文件,即成员内部类的 .class 文件总是这样:外部类名$内部类名.class)

Java 中的静态内部类

静态内部类是 static 修饰的内部类:

public class Outer{
    private int a = 89; // 外部类的私有变量
    static int b = 21;  // 外部类的静态变量
    
    // 静态内部类
    public static class Inner{
        int b = 2; // 内部类变量
        public void test() {
            System.out.println("访问外部类中的b:" + Outer.b);
            System.out.println("访问内部类中的b:" + b);
        }
    }
    
    public static void main(String[] args) {
        Inner in = new Inner(); // 直接创建内部类
        in.test();
    }
    
}

输出结果:
访问外部类中的b:21
访问内部类中的b:2

Java 中的方法内部类

// 外部类
public class Outer{
    // 外部类中的方法
    public void show() {
        final int a = 23;
        int b = 35;
        // 方法内部类
        class Inner{
            int c = 66; // 内部类中的变量
            public void print() {
                System.out.println("访问外部类的方法中的常量a:" + a);
                System.out.println("访问内部类中的变量c:"+ c);
            }
        }
        Inner ni = new Inner();  // 创建方法内部类
        ni.print();  // 调用内部类的方法
    }
    
    public static void main(String[] args) {
        Outer ou = new Outer(); // 创建外部类
        ou.show();
    }
}

输出:
访问外部类的方法中的常量a:23
访问内部类中的变量c:66

上一篇 下一篇

猜你喜欢

热点阅读