多态性

Posted weller

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多态性相关的知识,希望对你有一定的参考价值。

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 }

 

 

 

 

以上是关于多态性的主要内容,如果未能解决你的问题,请参考以下文章

多态性和动态铸造

java中封装,继承,多态,接口学习总结

什么是SNP(Single Nucleotide Polymorphism)?

C/C++编程笔记:C++中的函数重载和浮动

基于的ssr 遗传多样性分析

SSR技术原理是啥?