内部类Inner Class

1、内部类

内部类的主要优点是内部类实例与外部类实例共享一种特殊关系。这种特殊关系为内部类中的代码提供对外部类成员的访问。

内部类是外部类的一部分不仅仅是一部分,而且是外部类带有卡片的成员。这样内部实例作为外部类的成员,可以访问外部类的成员变量,甚至private成员。

1)、常规内部类

//1、从外部类代码内实例化内部类
class MyOuter{
    private int x=7;
    public void makeInner(){
        MyInner in = new MyInner();
        in.seeOuter();
    }
    class MyInner{
        public void seeOuter(){
            System.out.println("Outer x is"+x);
        }
    }
}
//2、从外部类实例代码之外创建内部类实例
public static void main(String[] args){
    MyOuter mo=new MyOuter();
    MyOuter.MyInner inner=mo.new MyInner();
    inner.seeOuter();
}

new MyOuter().new MyInner()

从内部类中引用内部或外部实例

  • 关键字 this 只能从实例代码内部使用,也就是说它不能用在静态代码内。
  • this引用是对当前执行对象的引用。
  • this引用是对对象把对自己的引用作为方法参数传递给其他方法。

eg:new Myclass().dostuff(this);

内部类代码引用自身:this

内部类代码引用外部this:<NameOfOuterClass>.this

2、本地方法内部类

  • 如果想实际引用这个内部类,则必须在这个方法内,但是在该内部类定义下面的某个地方为他建立实例。
  • 方法本地内部类与外部类共享一种关系。访问外部的成员变量。但内部类对象不能访问所在方法的局部变量。除非方法是final。也就是成员变量是final的。
  • 唯一能应用于方法本地内部类的修饰符是abstract和final
  • 静态方法内的内部类只能访问外部类的静态方法
//匿名内部类
//样式1:popcorn子类的实例
class Popcorn{
    public void pop(){
           System.our.println("pp");
    }
}
class Food{
    Popcorn p = new Popcorn(){
        public void pop(){
            System.out.println('any');
        }
    };
}
//如果调用父类中没有定义的任何方法,编译器都会抱怨。
//样式2:创建指定接口类型的匿名设计类
interface Cookable{
    public void cook();
}
class Food{
    Cookable c= new Cookable(){//Cookable是接口(接口是不能实例化的)
        public void cook(){
            System.out.println('any');
        }
    };//因为匿名内部类是实现接口设计类可以new
}
//匿名内部类只能设计一个接口
//匿名内部类不能同时扩展一个类和实现一个接口

3、静态方法内部类

非内部类,只能访问静态方法,不能访问外部类的实例变量和方法,是外部类的静态成员。

class BigOuter{
    static void Nested{}
}

class Broom{
    public static void main(String[] args){
        BigOuter.Nested n=new BigOuter.Nested();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值