多态性

Java中多态性主要表现在两个方面:方法的重载和覆写对象的多态性

对象的多态性主要表现在以下两种类型:

  • 向上转型:子类对象->父类对象   父类 父类对象 = 子类实例;
  • 向下转型:父类对象->子类对象   子类 子类对象 = (子类)父类对象;

1、向上转型:用子类对象转型到父类对象调用的还是子类覆写过得方法,但注意这样的父类对象不能调用父类中没有的方法。此处的父类对象可以使接口。

 

 1 class A{
 2     void print1() {            //定义print1
 3         System.out.println("父类print1");}
 4 }
 5 class B extends A{
 6     void print1() {           //覆写父类的print1
 7         System.out.println("子类print1");}
 8     void print2() {
 9         System.out.println("子类print2");}
10 }
11 public class Test{
12     public static void main(String args[]) {
13         A a = new B();
14         a.print1();           //此处调用覆写过得print1
15     }
16 }

 

2向下转型过程中,分为两种情况:

情况一:如果父类引用的对象如果引用的是指向的子类对象,那么在向下转型的过程中是安全的。也就是编译是不会出错误的。

情况二:如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误。

 

 1 class A{
 2     void print1() {            //定义print1
 3         System.out.println("父类print1");
 4 
 5     }
 6 }
 7 class B extends A{
 8     void print1() {           //覆写父类的print1
 9         System.out.println("子类print1");
10     }
11     void print2() {
12         System.out.println("子类print2");
13     }
14 }
15 public class Test{
16     public static void main(String args[]) {
17         A a = new B();        //转型成功
18         B b = (B)a;
19 //        A a = new A();        //转型失败
20 //        B b = (B)a; 
21         b.print1();
22     }
23 }

 

 

 

原文地址:https://www.cnblogs.com/mzct123/p/8283526.html