第六节——内部类

内部类的学习

一、内部类概念

  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");
  }
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值