多态的使用意义

1.多态(Polymorphism):就是父类型的引用可以指向子类型的对象。

2.Parent p = new Child ();当使用多态调用方法时,首先检查父类有没有该方法,若有,则执行该方法;若没有,则编译错误。

3.一共有两种类型的强制类型转换:

a) 向上类型转换(upcast):

比如说将Cat类型转换为Animal类型,即子类型转换为父类型。对于向上类型转换,不需要显式使用强制类型转换。

1.Cat  cat  = new Cat ();
2.Animal animal = cat;

第二行代码为向上类型转换。

b)向下类型转换

比如将Animal类型转换为Cat类型,即将父类型转换为子类型。对于向下类型转换,必须要显式使用强制类型转换。

1.Animal a = new Cat();
2.Cat cat = (Cat) a;

第二行代码将Animal类型强制转换为Cat型,为向下类型转换。

为什么要使用多态?

public class PolyTest2
{
    public void run(BMW bmw)
    {
        bmw.run();
    }

    public void run(QQ qq)
    {
        qq.run();
    }

    public static void main (String[] args)
    {
        PolyTest2 test = new PolyTest2();
        QQ qq = new QQ ();
        test.run (qq);
        BMW bmw = new BMW();
        test.run (bmw);
    }
}

class Car
{
    public void run()
    {
        System.out.println ("car is runing");
    }
}

class BMW extends Car
{
    public void run ()
    {
        System.out.println ("BMW is runing");
    }
}

class QQ extends Car
{
    public void run ()
    {
        System.out.println ("QQ is runing");
    }
}
 

以上代码是不使用多态的情况,PolyTest2这个类中的run方法既要处理BWM类中的run方法,又要处理QQ类中的run方法,不使用多态的话就要针对不同的对象逐一定义方法。若一个类有很多很多子类,那么代码量是非常庞大的。因此,这时候多态就非常有用了。

public class PolyTest2
{
 /*
    public void run(BMW bmw)
    {
        bmw.run();
    }

    public void run(QQ qq)
    {
        qq.run();
    }
        */
<strong>
    public void run (<span style="color:#FF0000;">Car car</span>)
    {
        car.run();
    }</strong>

    public static void main (String[] args)
    {
        PolyTest2 test = new PolyTest2();
        Car car = new QQ ();                               //Polymorphism
        test.run (car);

        BMW bmw = new BMW();
        test.run (bmw);                                   //use upcast
    }
}

class Car
{
    public void run()
    {
        System.out.println ("car is runing");
    }
}

class BMW extends Car
{
    public void run ()
    {
        System.out.println ("BMW is runing");
    }
}

class QQ extends Car
{
    public void run ()
    {
        System.out.println ("QQ is runing");
    }
}

以上是使用多态的代码,在子类繁多的情况下就大有用处了。代码虽然简单,认真体会其中的妙处,对写高质量的代码应该会有帮助!

多态的使用意义

时间: 2024-10-09 01:11:23

多态的使用意义的相关文章

浅谈多态机制的意义及实现

转自:http://blog.hesey.net/2010/12/significance-and-implementation-of-polymorphism.html: 在面向对象编程(Object-Oriented Programming, OOP)中,多态机制无疑是其最具特色的功能,甚至可以说,不运用多态的编程不能称之为OOP.这也是为什么有人说,使用面向对象语言的编程和面向对象的编程是两码事. 多态并没有一个严格的定义,维基百科上给它下的定义比较宽松: Subtype polymorp

[转载]浅谈多态机制的意义及实现

http://blog.hesey.net/2010/12/significance-and-implementation-of-polymorphism.html 在面向对象编程(Object-Oriented Programming, OOP)中,多态机制无疑是其最具特色的功能,甚至可以说,不运用多态的编程不能称之为OOP.这也是为什么有人说,使用面向对象语言的编程和面向对象的编程是两码事. 多态并没有一个严格的定义,维基百科上给它下的定义比较宽松: Subtype polymorphism

java基础之 多态

在面向对象编程(Object-Oriented Programming, OOP)中,多态机制无疑是其最具特色的功能,甚至可以说,不运用多态的编程不能称之为OOP.这也是为什么有人说,使用面向对象语言的编程和面向对象的编程是两码事. 多态并没有一个严格的定义,维基百科上给它下的定义比较宽松: Subtype polymorphism, almost universally called just polymorphism in the context of object-oriented pro

黑马程序员----java基础----继承与多态,附相关面试题

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一:继承(掌握) (1)把多个类中相同的成员给提取出来定义到一个独立的类中.然后让这多个类和该独立的类产生一个关系, 这多个类就具备了这些内容.这个关系叫继承. (2)Java中如何表示继承呢?格式是什么呢? A:用关键字extends表示 B:格式: class 子类名 extends 父类名 {} (3)继承的好处: A:提高了代码的复用性 B:提高了代码的维护性 C:让类与类产生了一个关

Java基础学习笔记八 Java基础语法之接口和多态

接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义与实现分离,优化了程序设计.请记住:一切事物均有功能,即一切事物均有接口. 接口的定义 与定义类的class不同,接口定义时需要使用interface关键字.定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件.这点可以让我们将接口看做是一种

javascript面向对象:继承、多态

继承 js中同样可以实现类的继承这一面向对象特性,继承父类中的所有成员(变量和属性),同时可扩展自己的成员,下面介绍几种js中实现继承的方式: 1,对象模仿:通过动态的改变 this 指针的指向,实现对父类成员的重复定义,如下: function ClassA(paramColor) { this.color = paramColor; this.sayColor = function() { alert(this.color); } } function ClassB(paramColor,

封装,继承,多态,接口

封装 封装的概述和好处: 是面向对象三大特征之一 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改. 封装原则: 将不需要对外提供的内容都隐藏起来. 把属性隐藏,提供公共方法对其访问. 成员变量private,提供对应的getXxx()/setXxx()方法 好处: 通过方法来控制成员变量的操作,提高了代码的安全性 把代码用方法进行封装,提高了代码的复用性 public class Student { String name; //int age

java 面向对象之多态

多态: 1意义: 1.1同一类型的引用指向不同的对象是,有不同的实现-----行为的多态 1.2同一对象被造型为不同的类型时,有不同的功能--------对象的多态 2向上造型:-----自动类型转换 2.1超类型的引用指向派生类的对象 2.2能造型成为的类型有:超类+所实现的接口 2.3能点出来什么,看引用的类型 3强制类型转换,成功的条件只有如下两种: 3.1引用所指向的对象,就是该类型 3.2引用所指向的对象,实现了该接口. 4强转时若不符合如上两个条件,则发生classcastexcep

python26 封装 多态 常用的内置函数 `__str__` `__del__` 反射 动态导入模块

今日内容: 1. 封装 2.多态 3. 常用的内置函数 `__str__ `__del__` 4.反射 5.动态导入模块 #1. 封装 ##1.1 什么是封装 ?(what) 对外部隐藏内部的属性,以及实现细节  , 给外部提供使用的接口 注意:封装有隐藏的意思,但不是单纯的隐藏 1.2学习封装的目的. 就是为了能够限制外界对内部数据的访问 1.3python中属性的权限分为两种 1.公开的 ?           没有任何限制 谁都能访问 2.私有的 ?          只有当前类本身能够访