Java三大特性之多态

原创 2016年05月20日 17:21:50

转载请标明出处:http://blog.csdn.net/wu_wxc/article/details/51463306
本文出自【吴孝城的CSDN博客】

一个行为具有多种表现形式称为多态
如吹奏乐器,吹笛子和吹箫声音是不同的,同样是吹这个动作,作用在不同对象上产生不同的效果,这就是多态。吹这个动作的多态。

Java的引用变量有两个类型,编译时类型和运行时类型。
编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的类型决定,如果编辑时类型和运行时类型不一致,就可能出现多态。

多态的体现
方法的重载和重写
对象的多态性

如类A,类B
其中

B extends A

那么向上转型

A a = new B();

可以通过a调用父类方法,如果父类方法被重写,将调用重写后的方法

向下转型要先向上转型,再向下转型

A a = new B();
B b = (B)a;

可以通过b调用子类的方法,父类的方法,(因为子类继承父类,享有父类方法)

引用类型转换
1、向上类型转换(隐式/自动类型转换),由小类型转向大类型
2、向下类型转换(强制类型转换),由大类型转向小类型
3、instanceof运算符,用来解决类型转换的安全性问题

例子

package cn.wuxiaocheng;

class A {
    public void priA1() {
        System.out.println("priA1");
    }

    public void priA2() {
        System.err.println("priA2");
    }
}

class B extends A {
    // 重写父类的priA1()方法
    public void priA1() {
        System.out.println("重写priA1");
    }
    public void priB() {
        System.out.println("priB");
    }
}

public class Test {

    public static void main(String[] args) {
        // 向上转型
        A a = new B();
        a.priA1();
        a.priA2();

    }

}

这里写图片描述

package cn.wuxiaocheng;

class A {
    public void priA1() {
        System.out.println("priA1");
    }

    public void priA2() {
        System.err.println("priA2");
    }
}

class B extends A {
    // 重写父类的priA1()方法
    public void priA1() {
        System.out.println("重写priA1");
    }
    public void priB() {
        System.out.println("priB");
    }
}

public class Test {

    public static void main(String[] args) {

        // 向下转型要先向上转型,再向下转型
        A a2 = new B();
        B b = (B)a2;
        b.priA1();
        b.priA2();
        b.priB();

    }

}

这里写图片描述

当在进行类型转换时,如果类型不匹配时会出现异常,可以用instanceof来用避免类型转换时的安全性问题

package cn.wuxiaocheng;

class A {
    public void priA1() {
        System.out.println("priA1");
    }

    public void priA2() {
        System.err.println("priA2");
    }
}

class B extends A {
    // 重写父类的priA1()方法
    public void priA1() {
        System.out.println("重写priA1");
    }
    public void priB() {
        System.out.println("priB");
    }
}

public class Test {

    public static void main(String[] args) {

        A a1 = new A();
        System.out.println(a1 instanceof A);
        System.out.println(a1 instanceof B);

        A a2 = new B();
        System.out.println(a2 instanceof A);
        System.out.println(a2 instanceof B);
    }
}

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

java提高篇(三)-----理解java的三大特性之多态

面向对象编程有三大特性:封装、继承、多态。        封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访...
  • chenssy
  • chenssy
  • 2013年10月16日 19:44
  • 57010

Java-面向对象编程-三大特性之多态

我们前面已经介绍了面向对象编程的三大特性之二,今天就介绍最后一个特性-多态。 什么叫多态?从字面上理解就是多种形态,即对同一个客体,可以有多种不同的形式。就好像糖一样,有多种口味,你想吃什么口味的就...
  • dengminghli
  • dengminghli
  • 2017年02月01日 18:14
  • 3042

java提高篇(三)-----理解java的三大特性之多态

面向对象编程有三大特性:封装、继承、多态。        封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访...
  • chenssy
  • chenssy
  • 2013年10月16日 19:44
  • 57010

java面向对象的四大特性-多态,继承,抽象,封装

1.多态 面向对象的四大特性:封装、继承、多态、抽象。从一定角度来看,封装和继承几乎都是为多态而准备的。是最重要的知识点。多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对...
  • basycia
  • basycia
  • 2016年07月07日 12:54
  • 4015

OC学习篇之---类的三大特性(封装,继承,多态)

之前的一片文章介绍了OC中类的初始化方法和点语法的使用:http://blog.csdn.net/jiangwei0910410003/article/details/41683873,今天来继续学习...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014年12月04日 22:20
  • 30889

【面试题】Java三大特性封装继承多态总结

本文内容总结于多篇博客,参考到的地方在文中都会一一列出 http://www.cnblogs.com/ibalintha/p/3897821.html 1.封装 封装...
  • zjkC050818
  • zjkC050818
  • 2017年10月18日 22:15
  • 415

面向对象三大特性之一 多态

首先,我们看一下百科的解释:多态(Polymorphism)按字面的意思就是"多种状态"。在面向对象语言中,接口的多种不同的实现方式即为多态。通俗的讲,就是同一个东西表现出多种状态,在面向对象的描述中...
  • lizhidefengzi
  • lizhidefengzi
  • 2017年03月11日 01:28
  • 285

Java三大特性——继承,封装和多态

总结Java三大特性:继承、封装和多态
  • SummerInnPhuket
  • SummerInnPhuket
  • 2016年02月18日 21:08
  • 3332

Java-面向对象编程-三大特性之多态

我们前面已经介绍了面向对象编程的三大特性之二,今天就介绍最后一个特性-多态。 什么叫多态?从字面上理解就是多种形态,即对同一个客体,可以有多种不同的形式。就好像糖一样,有多种口味,你想吃什么口味的就...
  • dengminghli
  • dengminghli
  • 2017年02月01日 18:14
  • 3042

C++ ——三大特性理解

1.封装 突破了C语言函数的概念,封装可以隐藏实现细节,使得代码模块化。2.继承 继承可以扩展已存在的代码模块(类);达到代码重用的目的。要实现继承,可以通过“继承”(Inheri...
  • michael019
  • michael019
  • 2015年10月01日 10:03
  • 1857
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java三大特性之多态
举报原因:
原因补充:

(最多只允许输入30个字)