多态性与转型
Posted irisiscool
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多态性与转型相关的知识,希望对你有一定的参考价值。
方法的多态性
-
方法的重载:同一个方法名,参数列表不同,可以根据传入的参数类型或个数的不同实现不同功能的执行;
-
方法的覆写:同一个方法名,参数列表相同,可以根据使用子类的不同有不同的实现。
对象的多态性:父子实例之间的转换处理
-
对象向上转型:父类 父类实例 = 子类实例,自动完成转换,并且子类覆写了父类的方法
-
大多数情况下考虑对象的向上转型
-
主要特点在于对参数进行统一的设计,有时重载也可解决问题,但是不易维护的
- 代码实例:
1 class Message { 2 public void print() { 3 System.out.println("Message"); 4 } 5 } 6 class DatabaseMessage extends Message { 7 public void print() { 8 System.out.println("Connecting to the database..."); 9 } 10 } 11 class WebServerMessage extends Message { 12 public void print() { 13 System.out.println("Connecting to the web server..."); 14 } 15 }
-
使用转型:
1 class Solution { 2 public static void main(String[] args) { 3 Message msg=new DatabaseMessage(); 4 msg.print(); 5 } 6 }
也可写成:
1 class Solution { 2 public static void main(String[] args) { 3 func(new DatabaseMessage()); 4 func(new WebServerMessage()); 5 } 6 7 public static void func(Message msg) { 8 msg.print(); 9 } 10 }
-
使用重载(不易维护):
1 class Solution { 2 public static void main(String[] args) { 3 func(new DatabaseMessage()); 4 func(new WebServerMessage()); 5 } 6 7 public static void func(DatabaseMessage msg) { 8 msg.print(); 9 } 10 }
-
-
对象向下转型:子类 子类实例 = (子类)父类实例,强制完成转换
-
在需要使用子类自己的特殊定义时使用
-
需要先向上再向下,存在隐患
1 Person per=new Superman(); 2 Superman man=(Superman) per;
==> 使用关键字 instanceof 来判断
-
以上是关于多态性与转型的主要内容,如果未能解决你的问题,请参考以下文章
重新认识java ---- 面向对象之多态(向上转型与向下转型)