内部类(InnerClass)

Java中允许将一个类A声明在另一个类B中,此时A为内部类,则B为外部类。

内部类的分类:成员内部类和局部内部类(方法内,代码块内、构造器内)

成员内部类
一方面,作为外部类的成员:
①可以直接调用外部类的结构
②被权限修饰符修饰
一方面,作为一个类:
①可以定义属性、方法、构造器等
②可以被final修饰
③可以被继承
④可以被abstract修饰

创建对象:外部类引用.new 内部类();

局部内部类(方法内,代码块内、构造器内)
一方面,作为外部类的成员:
①可以直接调用外部类的结构
②可以被static修饰
③不能被权限修饰符修饰
一方面,作为一个类:
①可以定义属性、方法、构造器等
②可以被final修饰
③可以被继承
④可以被abstract修饰

如何实例化成员内部类的对象?
①静态:外部类.内部类 引用 =new 外部类.内部类();
③非静态:外部类 s= new 外部类(); //先建外部类对象  ——> 外部类.内部类 引用=外部类.new 内部类();

匿名内部类:基于接口或者现有类创建新类

(1)本质是类(2)内部类(3)该类没有名字(4)同时还是一个对象

说明:匿名内部类是定义在外部类的局部位置,比如方法中,并且没有类名(只是被隐藏掉了,由jdk底层进行分配)。

匿名内部类的基本语法:new 类或接口(参数列表){类体};

public class test01{
    public static void main(String[] args) {

        /*
            编译类型:a
            运行类型:匿名内部类——>外部类名$1

            底层为:class test01$1 implements a{.....}
        */
        a a=new a{
            public void eat(){
                System.out.println("吃饭");
            }
        };
        a.eat();
        System.out.println("运行类型:"+a.getClass());//运行类型
  *************************************************************************
         /*
            编译类型:b
            运行类型:匿名内部类——>外部类名$2

            底层为:class test01$1 extands b{.....}
        */
        b b=new b{
            public void run(){
                System.out.println("跑步");
            }
        }.run();//直接调用run方法
        System.out.println("运行类型:"+b.getClass());//运行类型

    }
}



interface a{
public void eat();
}
class b{
public void run();
}

静态内部类

放在成员的位置。

调用:new 外部类.内部类();

 

如何在内部类中区分调用外部类的结构?
调内部类属性:this.属性                 调外部类属性:外部类.this.属性

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值