`
dyllove98
  • 浏览: 1383305 次
  • 性别: Icon_minigender_1
  • 来自: 济南
博客专栏
73a48ce3-d397-3b94-9f5d-49eb2ab017ab
Eclipse Rcp/R...
浏览量:38355
4322ac12-0ba9-3ac3-a3cf-b2f587fdfd3f
项目管理checkList...
浏览量:78693
4fb6ad91-52a6-307a-9e4f-816b4a7ce416
哲理故事与管理之道
浏览量:131839
社区版块
存档分类
最新评论

Java学习之 多态 Polymorphism

 
阅读更多

Java学习之多态

多态的概念

多态==晚绑定

不要把函数重载理解为多态。

因为多态是一种运行期的行为,不是编译期的行为。

多态:父类型的引用可以指向子类型的对象。

比如 Parent p = new Child();

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;

如果有,再去调用子类的该同名方法

(注意此处,静态static方法属于特殊情况,静态方法只能继承,不能重写Override,如果子类中定义了同名同形式的静态方法,它对父类方法只起到隐藏的作用。调用的时候用谁的引用,则调用谁的版本。)

(参考学习链接:http://docs.oracle.com/javase/tutorial/java/IandI/override.html

如果想要调用子类中有而父类中没有的方法,需要进行强制类型转换,如上面的例子中,将p转换为子类Child类型的引用。

因为当用父类的引用指向子类的对象,用父类引用调用方法时,找不到父类中不存在的方法。这时候需要进行向下的类型转换,将父类引用转换为子类引用。     

 

结合实例说明               

下面举个例子(有问题的代码已注释):

主要讲讲两种类型转换和两种编译时候的错误。

多态示例代码
public class PolyTest
{
    public static void main(String[] args)
    {
        
        //向上类型转换
        Cat cat = new Cat();
        Animal animal = cat;
        animal.sing();

                
        //向下类型转换
        Animal a = new Cat();
        Cat c = (Cat)a;
        c.sing();
        c.eat();


        //编译错误
        //用父类引用调用父类不存在的方法
        //Animal a1 = new Cat();
        //a1.eat();
        
        //编译错误
        //向下类型转换时只能转向指向的对象类型        
        //Animal a2 = new Cat();
        //Cat c2 = (Dog)a2;
        


    }
}
class Animal
{
    public void sing()
    {
        System.out.println("Animal is singing!");
    }
}
class Dog extends Animal
{
    public void sing()
    {
        System.out.println("Dog is singing!");
    }
}
class Cat extends Animal
{
    public void sing()
    {
        System.out.println("Cat is singing!");
    }
    public void eat()
    {
        System.out.println("Cat is eating!");
    }
}

 

例子的执行结果:

 

这段代码:

 

Cat类中定义了eat()方法,但是Animal类中没有这个方法,a1引用是Animal类的,所以找不到,编译时出错:

 

 

两种类型的类型转换

(1)向上类型转换(Upcast):将子类型转换为父类型。

对于向上的类型转换,不需要显示指定,即不需要加上前面的小括号和父类类型名。

 

 

(2)向下类型转换(Downcast):将父类型转换为子类型。

对于向下的类型转换,必须要显式指定,即必须要使用强制类型转换

 

 

并且父类型的引用必须指向子类的对象,即指向谁才能转换成谁。

不然也会编译出错:

 

 

因为父类引用指向的是Cat类的对象,而要强制转换成Dog类,这是不可能的。

 

多态学习的第二部分,抽象类和接口:http://www.cnblogs.com/mengdd/archive/2012/12/25/2832656.html

 

  

分享到:
评论

相关推荐

    多态Polymorphism3---马克-to-win java视频

    多态 Polymorphism 马克-to-win java视频的详细介绍

    多态Polymorphism5---马克-to-win java视频

    多态 Polymorphism 马克-to-win java视频的详细的介绍

    多态Polymorphism4---马克-to-win java视频

    多态Polymorphism 马克-to-win java视频的详细描述介绍

    多态Polymorphism1---马克-to-win java视频

    多态 Polymorphism 马克-to-win java视频的详细描述介绍

    Java零基础-多态.md

    内容概要: 本文介绍了Java中多态(Polymorphism)的概念和用法。读者将学习什么是多态,为什么需要多态,以及如何在程序中实现多态。此外,还会讨论多态时的一些注意事项和规则。 能学到什么: 理解多态的定义、...

    Java岗位常规面试题.pdf

    1. Java中的多态(Polymorphism)是什么?请举例说明多态的应用场景。 2. 请解释Java中的反射(Reflection)机制以及其在实际项目中的应用。 3. Java中的HashMap和ConcurrentHashMap有什么区别?请比较它们的特点和...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    10.4 多态(Polymorphism)以及其他 279 10.4.1 多态——运行方知结果 280 10.4.2 重载也不简单 280 10.4.3 使用多态构建车队 283 10.5 在多态的环境中拨开迷雾 284 10.5.1 神秘的Class类 284 10.5.2 覆盖不再...

    java学习笔记 初学者必读

    7.3. 多态(polymorphism) 7-18 7.3.1. 方法的覆盖(overridding) 7-18 7.3.2. 多态的分类 7-18 7.3.3. 运行时多态的三原则 7-19 7.3.4. 关系运算符:instanceof 7-20 7.4. 静态变量,方法和类 7-20 7.5. Singleton...

    Java技术及其应用 02 面向对象结构(共106页).ppt

    ◇多态 (Polymorphism) 指同一个继承体系中不同类的对象收到相同的消息时产生不同的行为方式。 学习面向对象编程首先就要学习怎样通过抽象得到类,即怎样将某些数据以及和数据有关的操作封装在一起。

    Java语言学习教程大纲及实例

    **Java语言基础教程** 1. **环境配置**: - 安装JDK(Java Development Kit) - 配置环境变量(JAVA_HOME, PATH) - 使用IDE(如Eclipse, IntelliJ IDEA或... - 多态(Polymorphism) - 抽象类与接口(Abstract Cl

    多态思维导图.xmind

    多态思维导图.xmind

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    10.4 多态(Polymorphism)以及其他 279 10.4.1 多态——运行方知结果 280 10.4.2 重载也不简单 280 10.4.3 使用多态构建车队 283 10.5 在多态的环境中拨开迷雾 284 10.5.1 神秘的Class类 284 10.5.2 覆盖不再...

    史上最全java名词解释

    Polymorphism(多态): Polymorphism(多态)是面向对象编程中的一个重要概念。它是指同一 个接口或父类的不同实现方式,可以使得程序能够在运行时动态地选择不同的实现方式。在 Java 中,多态性是通过继承和接口...

    Java语言基础下载

    多态(Polymorphism) 20 面向对象的优点 22 面向对象的分析、设计和编程 23 面向对象语言的发展简史 26 内容总结 29 独立实践 30 第三章:面向对象的程序设计 31 学习目标 31 类和对象的描述 32 声明类 32 声明属性 ...

    Polymorphism-in-Java

    Java多态

    JAVA基础课程讲义

    多态(polymorphism) 76 为什么需要多态? 76 如何实现多态? 77 方法绑定(method binding) 77 静态绑定 77 动态绑定 77 多态的使用要点 78 对象的转型(casting) 79 final 81 抽象类 82 抽象类的使用要点 83 接口 83 为...

    java课程资源第七章

    多态(polymorphism) “多态”理解 再论向上转型 多态内部机制 正确使用,私有、静态方法及域与多态关系 构造器-多态 协变的返回类型(Covariant return types) 用继承进行设计(纯继承与扩展、向下转型)

    10_Polymorphism:第10章

    在本章中,您将学习 多态的概念。 使用覆盖的方法来实现多态。 区分抽象类和具体类。 声明抽象方法以创建抽象类。 多态如何使系统可扩展和可维护。 在执行时确定对象的类型。 声明和实现接口。 笔记: 这是一...

    Thinking in Patterns java设计模式

    本书不是一本介绍性的书籍。对Java 的语法有一定程度的了解。你应该对“对象 (object)”及其内涵有深刻的理解,包括多态(polymorphism)。

    整理后java开发全套达内学习笔记(含练习)

    polymiorphism[java] 多态 (polymorphism 多形性[,pɒli'mɒ:fizm]) allowing a single object to be seen as having many types. principle n.原则,原理,主义 ['prinsipl] priority n. 优先级 [prai'ɒriti] ...

Global site tag (gtag.js) - Google Analytics