浅谈java多态的实现主要体现在哪些方面

 更新时间:2016年09月30日 10:54:42   投稿:jingxian  
下面小编就为大家带来一篇浅谈java多态的实现主要体现在哪些方面。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

thinking in java3中的多态

People are often confused by other, non-object-oriented features of Java, like method overloading, which are sometimes presented as object-oriented. Don't be fooled: If it isn't late binding, it isn't polymorphism

按文面翻译

人们总是被java的另一种非面向对象的特性所困惑,就像方法重载,有时候它以面向对象而存在,请不要犯傻,如果没有后期绑定(也就是运行期的动态绑定),它就不是多态.

所以,这段话要表达的意思就是说,多态要有动态绑定,否则就不是多态,方法重载也不是多态(因为方法重载是编译期决定好的,没有后期也就是运行期的动态绑定)

当满足这三个条件 1.有继承  2. 有重写  3. 要有父类引用指向子类对象

<span style="font-size:14px;"> 

例:
public class Address {
private String name;
public Address(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

定义基类(抽象类):
public abstract class Vehicle {
abstract void go(Address address);
}

Car对于基类的实现:
public class Car extends Vehicle{
@Override
public void go(Address address){
System.out.println("Car to " + address.getName());
}
}

Plane对于基类的实现:
public class Plane extends Vehicle{
@Override
void go(Address address) {
System.out.println("Plane to " + address.getName());
}
}


Driver中多态:
public void drive(Vehicle v){ ///多态,父类引用指向子类对象,实际传过来的是抽象类Vehicle的子类,或者实现类,然后编译器会根据具体实现类,来找实现方法。
v.go(new Address("杭州(abstract)")); ///此方法在具体的实现中被重写
}

Test:
public static void main(String[] args) {
Driver d = new Driver();
d.drive(new Plane()); //实际是Plane对象,则编译器就会找到Plane中,对go的实现
d.drive(new Car()); //实际是Car对象,则编译器就会找到Plane中,对go的实现
}

输出结果:
Plane to 杭州(abstract)
Car to 杭州(abstract)

</span>

多态:就是指相同的事物的不同状态,比如:水。水可以有三种状态:

气体、液体和固体。那么在JAVA中的多态也可以理解成这个意思,就是:

将父对象设置成为和一个或多个它的子对象相等的技术,

比如Parent=Child;

多态性使得能够利用同一类(父类)引用不同类的对象,

以及根据所引用对象的不同,以不同的方式执行相同的操作。

多态实现包括两种方式:重载和重写

例如:Animal a = new Tiger(); 这是一个老话题了,呵呵……

父类引用指向子类对象,Animal类中包含一个eat()方法,而Tiger类继承自

Animal类,如果子类重写了父类的eat()方法,则调用的时候,就可以按照子类

的形式调用,本质上是父类的方法,但是子类重写之后,就成了另一种方式,这就是多态。

以上就是小编为大家带来的浅谈java多态的实现主要体现在哪些方面的全部内容了,希望对大家有所帮助,多多支持脚本之家~

相关文章

  • 带你了解Java数据结构和算法之数组

    带你了解Java数据结构和算法之数组

    这篇文章主要为大家介绍了Java数据结构和算法之数组,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Spring中BeanFactoryPostProcessors是如何执行的

    Spring中BeanFactoryPostProcessors是如何执行的

    BeanFactoryPostProcessor是Spring容器提供的一个扩展机制,它允许开发者在Bean的实例化和初始化之前对BeanDefinition进行修改和处理,这篇文章主要介绍了你知道Spring中BeanFactoryPostProcessors是如何执行的吗,需要的朋友可以参考下
    2023-11-11
  • Java版给爱人表白的玫瑰花程序代码

    Java版给爱人表白的玫瑰花程序代码

    这篇文章主要讲解了Java版给爱人表白的玫瑰花程序代码,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧
    2018-05-05
  • JAVA面试题之Forward与Redirect的区别详解

    JAVA面试题之Forward与Redirect的区别详解

    这篇文章主要给大家介绍了在JAVA面试中可能遇到会遇到的一道题,就是java中Forward与Redirect两者之前的区别,文中介绍的非常详细,对大家具有一定参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • SpringBoot+WebSocket实现即时通讯功能(J2EE方式)

    SpringBoot+WebSocket实现即时通讯功能(J2EE方式)

    WebSocket是一种在单个TCP连接上进行全双工通信的协议,WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据,本文给大家介绍了SpringBoot+WebSocket实现即时通讯功能(J2EE方式),需要的朋友可以参考下
    2025-01-01
  • 解决@Validated注解无效,嵌套对象属性的@NotBlank无效问题

    解决@Validated注解无效,嵌套对象属性的@NotBlank无效问题

    这篇文章主要介绍了解决@Validated注解无效,嵌套对象属性的@NotBlank无效问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java中的transient关键字介绍

    Java中的transient关键字介绍

    这篇文章主要介绍了Java中的transient关键字介绍,需要的朋友可以参考下
    2015-03-03
  • 简洁实用的Java Base64编码加密异常处理类代码

    简洁实用的Java Base64编码加密异常处理类代码

    这篇文章主要介绍了简洁实用的Java Base64编码加密异常处理类代码,有一定的实用价值,需要的朋友可以参考下
    2014-07-07
  • JAVA 集成 PF4J 插件框架的应用场景分析

    JAVA 集成 PF4J 插件框架的应用场景分析

    PF4J是一个强大的Java插件框架,允许开发者将应用程序分解为可扩展的模块,本文介绍了PF4J的基本概念和如何在Java项目中集成,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-03-03
  • Java详解实现多线程的四种方式总结

    Java详解实现多线程的四种方式总结

    哈哈!经过一个阶段的学习,Java基础知识学习终于到多线程了!Java多线程以及后面互斥锁的概念都是Java基础学习的难点,所以我做了一个总结,希望对大家也有帮助
    2022-07-07

最新评论