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);
    }
}

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wu_wxc/article/details/51463306

《赤壁》学习笔记(一)

早就听说《赤壁》游戏是在国产游戏中的先驱,后来听说销售情况不是很好,干脆就把源码卖了,也就是业内人士常说的《G档案》。我费尽千辛万苦,在网上下载到了源码和标准版的游戏执行档。  分析了CBMain.C...
  • ysb
  • ysb
  • 2002-07-06 23:29:00
  • 1640

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

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

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

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

多态的使用和概述以及弊端和好处

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • qq_28483283
  • qq_28483283
  • 2016-03-10 21:44:16
  • 3620

深入理解多态,为什么说静态成员无多态特性?

这是前不久做的一道关于静态成员与静态方法特性的题,真的不做下题都不知道自己的基础究竟是有多浅薄,当然这里指对多态的理解一、先回顾下静态成员与静态变量吧,static关键字参考书籍《Java编程思想》 ...
  • github_37022917
  • github_37022917
  • 2017-03-02 18:34:36
  • 1075

多态以及其优缺点

多态:可以理解为事物存在的多种体现形态,比如说人:男人、女人;动物:猫,狗。 多态: 多种形态。 这里要重点讲的就是对象的多态性。 狗 x = new 狗(); 动物 y = new 狗()...
  • xuchuangqi
  • xuchuangqi
  • 2016-07-15 21:57:37
  • 1176

多态的特点

------- android培训、java培训、期待与您交流! ---------- 在多态中成员函数的特点: 在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有,...
  • yangfengxiao
  • yangfengxiao
  • 2012-09-17 20:44:31
  • 152

Java三大特性之多态

转载请标明出处:http://blog.csdn.net/wu_wxc/article/details/51463306 本文出自【吴孝城的CSDN博客】 一个行为具有多种表现形式称为多态 如...
  • wu_wxc
  • wu_wxc
  • 2016-05-20 17:21:50
  • 559

<em>Java</em> 面向对象<em>三大特性</em>之<em>多态</em>

举报人: 被举报人: qq_18505715 举报的资源分: 3 *类型: *详细原因: 取  消 提  交 <em>Java</em> 面向对象<em>三大特性</em>之<em>多态</em> 3积分 立即下载 ...
  • 2018年04月13日 00:00

Java 三大特性

一、 封装1. 封装就是将类的信息隐藏在类内部,不允许外部程序直接访问,而是通过该类的方法实现对隐藏信息的操作和访问。2. 封装是怎么实现的呢?   a. 需要修改属性的访问控制符(修改为privat...
  • zhang250515
  • zhang250515
  • 2018-02-28 16:36:52
  • 34
收藏助手
不良信息举报
您举报文章:Java三大特性之多态
举报原因:
原因补充:

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