欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java多重继承实现方法

程序员文章站 2022-07-15 17:13:13
...

我们都知道,在Java中一个类可以多重实现,但是不能多重继承。也就是说一个类可以同时实现多个接口,但不能同时继承多个类。有时候我们需要让一个类同时拥有多个类的行为功能。这时候使用单继承特性就很难解决问题了。幸运的是Java提供的内部类可以用来解决此问题。

内部类的一个重要特性:内部类可以继承一个与外部类无关的类,保证了内部类的独立性,正是基于这一点, 多重继承才会成为可能。这种内部类叫做成员内部类(也叫做实例内部类,Instance Inner Class)。

明白了一些简单的原理,下面来看一个案例:在游戏人物设定中,通常子女的属性值受父亲和母亲的属性值影响。其中父亲为敏捷值突出,母亲恢复值突出。定义一个父亲、母亲接口,用于描述父亲敏捷值和母亲恢复值。代码如下:

// 父亲
public interface Father {
	// 敏捷
    int agile();
}
// 母亲
public interface Mother {
	// 恢复
    int recover();
}

再定义父亲、母亲的实现:

// 父亲实现
public class FatherImpl implements Father {
    // 父亲敏捷值为8
    @Override
    public int agile() {
        return 8;
    }
}
// 母亲实现
public class MotherImpl implements Mother {
    // 母亲恢复值为8
    @Override
    public int recover() {
        return 8;
    }
}

下面我们来定义儿子类,儿子需要同时继承父亲的敏捷和母亲的恢复功能,代码如下:

public class Son extends FatherImpl implements Mother {
    // 儿子敏捷值在父亲基础上+1
    public int agile() {
        return super.agile() + 1;
    }

    @Override
    public int recover() {
        return new MotherImplAttr().recover();
    }

    private class MotherImplAttr extends MotherImpl {
        public int recover() {
            // 儿子恢复值在母亲基础上-1
            return super.recover() - 1;
        }
    }
}

同样我们可以用匿名内部类来覆写父类方法,继承父类行为。再来定义个女儿类:

public class Daughter extends MotherImpl implements Father {
	// 女儿恢复值在母亲基础上+1
    public int recover() {
        return super.recover() + 1;
    }

    @Override
    public int agile() {
        return new FatherImpl() {
            public int agile() {
            	// 女儿敏捷值在父亲基础上-1
                return super.agile() - 1;
            }
        }.agile();
    }
}

测试:

public static void main(String[] args) {
    Son son = new Son();
    System.out.println("儿子敏捷值:" + son.agile());
    System.out.println("儿子恢复值:" + son.recover());
    System.out.println("************");
    Daughter daughter = new Daughter();
    System.out.println("女儿敏捷值:" + daughter.agile());
    System.out.println("女儿恢复值:" + daughter.recover());
}

结果:
Java多重继承实现方法
于是在面对麋鹿(四不像)其外形“似鹿非鹿,似马非马,似牛非牛,似驴非驴”的情形你就能很好的解决问题了,只需定义鹿、马、牛、驴四个类,建立麋鹿类的多个内部类,继承他们即可。

相关标签: Java 多重继承