Java中的多态性是面向对象中的第三大主要特征(其余两个是封装和继承)。多态性实际上是在继承的基础上扩展出来的。
public void fun(){
System.out.println("方法调用");
}
//重载上一个方法
public String fun(String value){
return "方法调用";
}
//父类
public class Father {
public void fun(){
System.out.println("方法调用");
}
}
//子类
public class Son extends Father {
@Override
public void fun() {
System.out.println("方法的复写");
}
}
主要体现在父、子类实例之间的转换处理。父、子实例的相互转换有两种模式一种是向上转型,一种是向下转型。
public static void main(String[] args) {
//对象的向上转型
Father f=new Son();
}
用途:这种转型的主要用于参数的统一化设计,便于日后的方法维护。请看下面的代码。
//父类
public class Msg {
public void printMsg(){
System.out.println("父类打印的消息");
}
}
//子类1
public class NetMsg extends Msg{
@Override
public void printMsg(){
System.out.println("子类网络连接信息");
}
}
//子类2
public class DataMsg extends Msg{
@Override
public void printMsg(){
System.out.println("子类数据库连接信息");
}
}
--------------------------------------------------
public class demo {
//定义一个方法,参数为Msg类型
public static void demo_fun(Msg msg){
msg.printMsg();
}
//调用方法
public static void main(String[] args) {
//调用子类1
demo_fun(new NetMsg());
//调用子类2
demo_fun(new DataMsg());
}
--------------------------------------------------
输出:子类网络连接信息
子类数据库连接信息
//父类
public class Person {
public void dailyWork(){
System.out.println("吃饭、睡觉、写代码");
}
}
//子类
public class SuperMan extends Person {
public void specialWork(){
System.out.println("拯救世界");
}
}
--------------------------------------------------
public static void main(String[] args) {
//向上转型
Person p = new SuperMan();
//向下转型
((SuperMan) p).specialWork();
}
--------------------------------------------------
输出:拯救世界
需要注意的一点是我们无法将一个父类对象赋值给一个子类引用!
如果我们未经强制类型转换就是用子类中特有的方法,那么将无法通过编译,这也就是上面说的风险所在。看代码:
public static void main(String[] args) {
Person p=new SuperMan();
//无法通过编译,找不到这个方法
p.specialWork();
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务