Java中实现多继承

    众所周知,Java中是没有多继承的,只有多实现.但是,有时候我们确实需要继承多个类,这是个比较现实的问题,但是,标准的语法限制了我们,虽然可以通过多重继承来达到这样的效果,但是,看上去依旧那么不优雅,所以这边我想到一个办法,即通过内部类的方式进行多继承.

    我们就以一个比较浅显的例子来说明问题,人类的造人.我们都知道,子女的很大部分都是由父母继承而来,所以需要多继承,通常情况下,我们通常会这么写:

    先是父母类接口:

public interface MotherIF {
	public int getKind();
}
public interface FatherIF{
	public int getStrong();
}

    
然后,我们来写父母类的具体实现:

public class Mother implements MotherIF{
	@Override
	public int getKind() {
		return 8;
	}
}
public class Father implements FatherIF{
	@Override
	public int getStrong(){
		return 8;
	}
}

    然后我们可以知道,父亲的强壮指数是8,母亲的善良指数是8,所以门当户对啊,于是他们的小孩也应该更加优秀.所以儿子应该继承了父亲的强壮和母亲的温柔.于是,我们需要儿子继承父亲和母亲,传统的方法是使用多层继承,即有一个类,先继承了母亲.再继承父亲,最后得到儿子,但是这样做,十分丑陋,而且对上层函数的重写也看上去不是那么清晰.于是这边我们采用的是使用内部类的方法.

public class Son extends Father implements MotherIF{

	@Override
	public int getKind() {
		return new myMother().getKind();
	}

	@Override
	public int getStrong(){
		return super.getStrong() + 1;	//比父亲更加强壮
	}
	
	private class myMother extends Mother{
		public int getKind() {
			return super.getKind() - 1;	//没有母亲那么善良
		}
	}
}

    这一段代码中,我们创建了一个myMother类,来继承母亲类,获取了母亲类的行为方法这是内部类的一个重要的特征.内部类可以通过继承一个与外部类无关的类来保证内部类的独立性,真是因为这一点,多层继承才可以完成.除了这边介绍的成员内部类之外,这里还介绍另外一种方式,匿名内部类.我们来看女儿的代码:

public class Daughter extends Mother implements FatherIF{

	@Override
	public int getStrong() {
		return new Father(){
			@Override
			public int getStrong(){
				return super.getStrong() - 2;
			}
		}.getStrong();
	}

	public int getKind(){
		return super.getKind() + 1;
	}
}

    这边我们可以看到,女儿继承了母亲的善良,也继承了,父亲的强壮.这边的腹泻方法,是创建了一个匿名内部类,来完成继承父亲行为的功能.

    再比如,我们常说的四不像,我们可以在四不像中定义鹿马牛驴这四个内部类,然后如法炮制即可.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.