内部类实现多继承(内部类的优势)及内部类实现一个接口与外围类实现这个接口的区别

在java中一个类可以多重实现,但不能多重继承,也就是说一个类能够同时实现多个接口,但不能同时继承多个类。但有时候我们确实需要继承多个类,比如希望拥有两个类的行为功能,就很难使用单继承来解决问题了(当然多层继承是可以解决的),那么我们还可以用什么办法来解决多重继承的问题呢?没错!用内部类!下面介绍一个案例。假设有一个父亲和母亲,他们的儿子继承了他们两个的优点,那么怎么来写呢?

  1. public interface Father {

    //定义父亲的强壮指数的接口

    public int strong();

    }

  2. public interface Mother {

    //定义母亲的善良指数的接口

    public int kind();

    }

  3. public class FatherImpl implements Father {

    //实现父亲接口,定义父亲强壮指数为8

    @Override

    public int strong() {

    return 8;

    }

    }

  4. public class MotherImpl implements Mother {

    //实现母亲接口,定义母亲善良指数为8

    @Override

    public int kind() {

    return 8;

    }

    }

  5. 下面儿子类来了~~

儿子类

可以看到儿子继承父亲,并且覆写了父类的strong方法,同时呢儿子也具有母亲的优点,覆写了母亲的kind方法。这里构造了一个MotherSpecial类继承于母亲类,也就是获得了母亲类的行为方法,这也是内部类的一个重要特征:内部类可以继承一个与外部类无关的类,保证了内部类的独立性,正是基于这一点,多重继承才能成为可能~~

在现实生活中,也确实存在多重继承的问题,比如我国的“四不像”(学名麋鹿),其外形“似鹿非鹿,似马非马,似牛非牛,似驴非驴”,这要是用单继承就麻烦了,如果用多继承的话就可以很好的解决问题了,定义鹿、马、牛、驴四个类,再建立麋鹿类的多个内部类,继承他们即可~~~


内部类实现一个接口与外围类实现这个接口的区别


在java中,外围类只能继承一个基类,要实现多继承,只有继承多个接口类型。有时,你需要与接口的实现进行交互,所以使用内部类最重要的一个原因是:每个内部类都能独立的继承自一个(接口的)实现,内部类允许你继承多个非接口类型。正是因为内部类的这种能力,有效的实现了“多重继承”。

内部类的其他特性:

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

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

3.创建内部类对象的时候并不依赖外围类对象的创建;

4.内部类与外围类之间没有另人迷惑的“is-a”关系,它就是一个独立的实体



猜你喜欢

转载自blog.csdn.net/xjk201/article/details/81030864
今日推荐