内部类

内部类:在一个类的定义另一个类。

为什么需要内部类?

        在可以满足需求的情况下,我们尽量不要用到内部类。内部类和外围类实现接口有什么区别呢!外围类不是总能享用接口带来的方便,有时需要用到接口的实现。所以内部类最大的好处是每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。模拟多继承。

内部类的几个特性:

1、内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立。

2、在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或继承同一个类。

3、创建内部类对象的时刻并不依赖于外围类对象的创建。

4、内部类不是is-a,它是一个独立的实体。

 

内部类的使用我们可以做到下面两种情况

1)实现某类型的接口,于是可以创建并返回对其的引用

2)你要解决一些复杂的问题,想创建一个类来辅助你的解决方案,但是你又不希望这个类是公共可用的。

public class Parcel4 {
    private class PContents implements Contents{
        private int i = 11;
        @Override
        public int value() {
            return i;
        }
    }
    protected class PDestination implements Destination{
        private String label;
        private PDestination(String whereTo){
            label = whereTo;
        }
        @Override
        public String readLabel() {
            return label;
        }
    }
    public Destination destination(String s){
        return new PDestination(s);
    }
    public Contents pContents(){
        return new PContents();
    }

    public static void main(String[] args) {
        Parcel4 p = new Parcel4();
        Contents c= p.pContents();
        Destination d= p.destination("s");
    }
}

匿名内部类

public class Parcel7 {
    public Contents contents(){
        return new Contents() {
            private int i =11;
            @Override
            public int value() {
                return i;
            }
        };//这个分号并不是标记此内部类的结束,是标记表达式的结束,在这里正巧包含了匿名内部类罢了,因此这里和别的地方使用的分号是一致的
    }
}

//等同于下面的类
public class Parcel8 {
    class MyContents implements Contents{
        private int i =11;
        @Override
        public int value() {
            return i;
        }
    }
    public Contents contents(){
        return new MyContents();
    }
}

上面匿名内部类的语法是指:创建一个继承自Contents的匿名类的对象,通过new表达式返回的引用被自动向上转型为对Contents的引用。Parcel7是Parcel8的简化形式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子鞋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值