-----------siwuxie095
多态性的体现:
(1)方法的重载与重写
(2)对象的多态性
对象的多态性:
(1)向上转型:程序会自动完成
(2)向下转型:强制类型转换
代码:
package com.siwuxie095.pol;
class A{ public void tell1() { System.out.println("A---tell1()"); } public void tell2() { System.out.println("A---tell2()"); } }
class B extends A{ //复写方法 或 重写方法 public void tell1() { System.out.println("B---tell1()"); }
public void tell3() { System.out.println("B---tell3()"); } }
public class PolDemo01 {
public static void main(String[] args) { //向上转型 B b=new B(); A a=b; //或合成一步 A a=new B(); //因为tell1() 是被重写的,所以调用时调用的是重写后的方法 a.tell1(); a.tell2();
System.out.println();
//向下转型 A ax=new B();//向下转型一定要先发生向上转型 B bx=(B)ax; bx.tell1(); bx.tell2(); bx.tell3();
}
} |
运行一览:
如果在向下转型时不先发生向上转型,即 A ax=new A();,就会发生
类型转换异常(ClassCastException),即 这两个类之间没有明确的
指向关系
多态性的应用:
代码:
package com.siwuxie095.pol;
//父类 T class T{ public void tell1() { System.out.println("W---tell1()"); } }
//子类 X class X extends T{ public void tell2() { System.out.println("X---tell2()"); } }
//子类 Y class Y extends T{ public void tell3() { System.out.println("Y---tell3()"); } }
//子类 Z class Z extends T{ public void tell4() { System.out.println("Z---tell4()"); } }
public class PolDemo02 {
public static void main(String[] args) { //子类执行父类方法 say(new X()); //传递匿名对象进去 say(new Y()); say(new Z()); }
public static void say(T t) { t.tell1(); }
} |
运行一览:
【made by siwuxie095】