第六节——内部类

Posted 想学习安全的小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第六节——内部类相关的知识,希望对你有一定的参考价值。

内部类的学习

一、内部类概念

  1. 在一个类中定义一个类
  2. 内部类分为:成员内部类,局部内部类和匿名内部类

二、内部类的访问特点

  1. 内部类可以直接访问外部类的成员,包括私有。

  2. 外部内要访问内部内成员,需要创建对象,使用对象来访问。

  3. 若内部类被static修饰,外部类可以使用类名访问被static修饰的成员变量与方法;而没有没static修饰的成员变量与方法只能通过创建对象来访问。

三、成员内部类

  1. 形式:
public class Test1 {
    public class Test2 {  //Test2为成员内部类
    }
}
  1. 成员内部类的使用,格式:外部类名.内部类名 对象名 = new 外部类对象.内部类对象
    eg:Test1.Test2 t2 = new Test1().Test2();

四、局部内部类

  1. 形式:
public class Test1 {
    public void method(){
        class Test2{ //定义在外部类的方法里面的类称为局部内部类
        }
    }
}
  1. 局部内部类的使用:通过执行外部类方法,给出局部内部类的定义以及对象创建,并使用。
//定义局部内部
public class Test1 {
    public void method(){
        class Test2{
            public void show(){
                System.out.println("test2");
            }
        }
        Test2 t2 = new Test2();
        t2.show();
    }
}
//使用
Test1 t1 = new Test1();
t1.method();

五、匿名内部类

  1. 前提:存在一个类或接口,类可以是具体类也可以是抽象类
  2. 本质:匿名内部类是一个继承了该类或实现了该接口的子类匿名对象
  3. 格式:
new 类名或接口名(){
  重写方法()
};
  1. 例子:
//定义一个接口
public interface Inter {
    public abstract void show();
}

//定义一个类,在方法中实现内部类的使用,此方法适合单次使用
public class Test1 {
    public void method(){
        new Inter(){
            @Override
            public void show() {
                System.out.println("Inter");
            }
        }.show();  //不加.show()仅仅是一个定义,无法使用,注意;一直都有
    }
}

//创建外部类对象,调用方法执行内部内方法
Test1 t1 = new Test1();
t1.method();

//匿名内部类除了使用.方法名()之外,还可以通过多态创建对象使用,此方法适合多次调用
public class Test1 {
    public void method(){
        Inter i = new Inter(){
            @Override
            public void show() {
                System.out.println("Inter");
            }
        };
        i.show();
    }
}
  1. 使用技巧:当需要实现接口时,不用每次都创建一个对象,可以直接使用匿名内部类传参
       -方法一:创建对象传参
//定义一个接口
public interface Inter {
    public abstract void show();
}
//定义一个操作类使用接口函数
public class Test1 {
    public void method(Inter i){
        i.show();
    }
}
//定义一个类实现接口
public class Test2 implements Inter{
    @Override
    public void show() {
        System.out.println("test2");
    }
}
//使用操作类执行接口函数
Test1 t1 = new Test1();
t1.method(new Test2());

   -方法二:使用内部类传参

//定义一个接口
public interface Inter {
    public abstract void show();
}
//定义一个操作类使用接口函数
public class Test1 {
    public void method(Inter i){
        i.show();
    }
}
//使用操作类执行接口函数
Test1 t1 = new Test1();
t1.method(new Inter() {
  @Override
  public void show() {
     System.out.println("Inter");
  }
});

以上是关于第六节——内部类的主要内容,如果未能解决你的问题,请参考以下文章

初始Java 来自Java SE的第六节课 类和对象

中央处理器-第六节3:五段式指令流水线

第六节——spring注解开发

第六节:mybatis小技巧

第六节:Java中元素和对象的比较方法

第六节 静态的(static)和单例模式