美文网首页
Java_basic_7: 内部类

Java_basic_7: 内部类

作者: DiscoSOS | 来源:发表于2017-10-10 04:24 被阅读0次

内部类(Inner class)的定义

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

内部类的作用

  • 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
  • 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
  • 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便

内部类的分类

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

成员内部类

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

成员内部类的使用方法:

public class Outer {
    private int a = 99;
    
    public class Inner{
        int b = 2;
        public void test() {
            System.out.println(a);  
            System.out.println(b);
        }
    }
    
    public static void mian(String args[]) {
        Outer outer = new Outer();
        Inner inner = outer.new Inner();
        inner.test();
    }

}

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

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

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

4、 编译上面的程序后,会发现产生了两个 .class 文件

  • 外部类是不能直接使用内部类的成员和方法的。可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。

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

静态内部类 static 修饰

public class SOuter {
    private int a = 99;
    static int b = 3;
    public static class SInner{
        int b  = 2;
        public void test() {
            System.out.println("访问外部类中的b " + SOuter.b   );
            System.out.println("访问内部类中的b " + b);
        }
    }
    
    
    public static void main(String args[]) {
        SInner si = new SInner();
        si.test();
    }

}

1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问

2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

方法内部类

  • 方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。
  • 由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。
public class MOuter {
    //
    public void show() {
        final int a = 25;
        int b = 13;
        //
        class MInner{
            int c = 2;
            public void print() {
                System.out.println("访问外部类中的常量: " + a);
                System.out.println("访问内部类的变量    " + c);
            }
        }
        MInner mInner = new MInner();
        mInner.print();
        
    }
    
    public static void main(String args[]) {
        MOuter mOuter = new MOuter();
        mOuter.show();
    }

}

相关文章

  • Java_basic_7: 内部类

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

  • 内部类

    成员内部类 局部内部类(定义在方法内和定义在作用域内的类) 匿名内部类

  • Java 内部类

    内部类包括成员内部类、方法内部类、*静态内部类、匿名内部类*。 内部类的作用 由于内部类的实现和外部类没有关系,内...

  • Java学习——内部类

    内部类 一,成员内部类(包括静态内部类和非静态内部类) 非静态内部类可以直接访问外部类的成员,反之则不行 非静态内...

  • Java 内部类、静态内部类、方法内部类(未完待续)

    内部类 什么是内部类?内部类其实就是在一个类中创建的类。内部类有四种: 成员内部类 静态内部类 局部内部类 匿名内...

  • java 内部类

    一般有四种内部类的使用方式: 嵌套的内部类 方法内的内部类 静态内部类 匿名内部类 什么时候用内部类: 有时候明显...

  • 内部类

    内部类 1.可以访问访问其外部类所有属性和方法,无需创建外部类对象 2.必须创建内部类对象,否则无法从外部类访问内...

  • Java 中的方法内部类

    Java 中的方法内部类 方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内...

  • java——内部类

    内部类 定义: 内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内...

  • java之面向对象5

    方法内部类: 简而言之就是定义在外部类的方法内的类。 方法内部类只在该方法的内部可见,即只在该方法内可以使用。 方...

网友评论

      本文标题:Java_basic_7: 内部类

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