您的位置:首页 > 编程语言 > Java开发

JAVA多态的事例

2015-09-08 10:54 316 查看
以下是关于JAVA多态的小事例:

class A ...{
public String show(D obj)...{
return ("A and D");
}
public String show(A obj)...{
return ("A and A");
}
}
class B extends A...{
public String show(B obj)...{
return ("B and B");
}
public String show(A obj)...{
return ("B and A");
}
}
class C extends B...{}
class D extends B...{}
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
System.out.println(a1.show(b));   ①
System.out.println(a1.show(c));   ②
System.out.println(a1.show(d));   ③
System.out.println(a2.show(b));   ④
System.out.println(a2.show(c));   ⑤
System.out.println(a2.show(d));   ⑥
System.out.println(b.show(b));    ⑦
System.out.println(b.show(c));    ⑧
System.out.println(b.show(d));    ⑨


输出结果:

①   A and A
②   A and A
③   A and D
④   B and A
⑤   B and A
⑥   A and D
⑦   B and B
⑧   B and B
⑨   A and D


解析:

1.实例对象为A,参数为对象B,B为A的子类。执行A.class中show(A obj)

2.同上

3.实例对象为A,参数为对象D,执行A.class中show(D obj)

4.实例对象依然为A,参数为B,本应执行A.class中show(A obj),但是,B.class重写了show(A obj),所以执行B.class show(A obj)

5.同上

6.执行A.class show(D obj) B中并没有重写。

7,8.实例对象为B,参数为B或者B的子类,执行show(B obj)

9.实例对象为B,参数为D,因为B继承自A,也可以执行A中的show(D obj)

关于多态的概念:

多态:父类型的引用可以指向子类型的对象。
  比如 A a = new B();
    当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;
    如果有,再去调用子类的该同名方法。
  (注意此处,静态static方法属于特殊情况,静态方法只能继承,不能重写Override,如果子类中定义了同名同形式的静态方法,它对父类方法只起到隐藏的作用。调用的时候用谁的引用,则调用谁的版本。)

如果想要调用子类中有而父类中没有的方法,需要进行强制类型转换,如上面的例子中,将a转换为子类B类型的引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: