内部类

作者: lqsss | 来源:发表于2018-03-06 18:18 被阅读0次

为什么要用内部类(多重继承、闭包)

  1. 一个内部类的对象能够访问创建它的对象的实现,包括私有数据。
  2. 对于同一个包中的其他类来说,内部类能够隐藏起来。
  3. 匿名内部类可以很方便的定义回调。
  4. 使用内部类可以非常方便的编写事件驱动程序

内部类基础

  1. 成员内部类
public class MemberInnerClass {
    private int num ;
    private int num1 = 2;
    public MemberInnerClass(int num) {
        this.num = num;
    }
    
    public void access(){
        new Test().print();
    }
    
    class Test{
        private int num1 = 3;
        public void print(){
            System.out.println("成员内部类");
            System.out.println(num);
            System.out.println(num1);
            System.out.println(MemberInnerClass.this.num1);
        }
    }
//成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)
//在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问
//如果要访问外部类的同名成员,默认情况下访问的是成员内部类的成员
//外部类.this.成员变量
//外部类.this.成员方法
    public static void main(String[] args) {
       MemberInnerClass.Test test= new MemberInnerClass(1).new Test();
        test.print();
        System.out.println("外部类访问内部类成员");
        new MemberInnerClass(1).access();
    }
}
  1. 局部静态类
public class PartialInnerClass {
    
    public PartialInnerClass() {
        class PInnerClass{
            int num = 1;
            public PInnerClass getInstance(){
                return new PInnerClass();
            }
        }
        System.out.println(new PInnerClass().num);
    }

//它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内
//局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。
    public static void main(String[] args) {
        new PartialInnerClass();
    }
}
  1. 匿名内部类

匿名内部类也就是没有名字的内部类
正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写
但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

abstract class Person {
    public abstract void eat();
}
public class NoNameInnerClass {
    public static void main(String[] args) {
        Person p = new Person() {
            public void eat() {
                System.out.println("eat something");
            }
        };
        p.eat();
    }
}
//若没有匿名内部类:
//1. 继承实现一个抽象类
//2. 创建该对象
//3. 调用方法
  1. 静态内部类
public class StaticInnerClass {

    static int a = 1;
    public StaticInnerClass() {
        
    }
    static class Inner {
        public Inner() {
            System.out.println(a);
        }
    }

    public static void main(String[] args) {
        StaticInnerClass.Inner test = new Inner();//可以直接创建对象
    }
}

相关文章

  • 内部类

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

  • Java 内部类

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

  • Java学习——内部类

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

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

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

  • java 内部类

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

  • 内部类

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

  • Java 中的方法内部类

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

  • java——内部类

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

  • java之面向对象5

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

  • Java 内部类

    1. 内部类 概念:在一个类的内部再定义一个完整的类内部类分为 4 类:成员内部类、静态内部类、局部内部类、匿名内...

网友评论

      本文标题:内部类

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