public interface Animal {
void move();
}
public interface Dog extends Animal{ @Override void move(); void bark(); }public class XiaoHuang implements Dog{ @Override public void move() { System.out.println("这是animal的方法"); } @Override public void bark() { System.out.println("这是Dog的方法"); } public void fun2(){ System.out.println("实例的方法"); } }
自己写了一个简陋的代码
public class textDemo { public static void fun3(Animal animal){ // animal.move(); // animal.bark(); bark是子接口Dog的方法,报错; Dog dog = (Dog)animal; dog.move(); dog.bark(); // dog.fun2(); fun2是实例xiaohaung的方法,报错; /** * 总结通用规律就是,用父接口引用接受通用类型的数据(因为传过来的数据一定是符合某个接口或子接口的), * 此时,若不做强转,就是所说的编译时看左边,运行时看右边。 * 强转后,用恰好对应的接口引用去接受数据,其实也同样是编译看左边,运行看右边。(解释了dog调用不了fun2) * 根据具体数据强转成对应的接口类型,然后就可以调用子接口中的特有的方法。 * (对于传过来的不同数据,父接口通用方法满足不了),合理的转为子类。 */ } public static void main(String[] args) { XiaoHuang xiaoHuang = new XiaoHuang(); xiaoHuang.fun2(); fun3(xiaoHuang);//多态的实现 } }
看看得了,对初学者应该还是有点小帮助的