JAVA三大特性之三---多态性

原创 2015年07月09日 14:35:32

前面的封装和继承基本上都是为多态而准备的,所以说多态是非常重要的,可能也是相对的难点吧。首先,多态是指允许不同类的对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式,多态性主要是为了消除类型之间的耦合关系。多态就是使用相同的方法,但是在不同的类中得到的结果不一样,大概可以这么理解吧。(还是好多格式不会调啊)

多态的三个必要条件:1.要有继承2.要有重写3.父类引用指向子类对象。

多态的好处:可替换性、可扩充性、接口性、灵活性、简化性等等。

多态实现方式:接口实现、继承父类进行方法重写、同一个类中进行方法重载。

个人感觉下面这个例子还是很好的:

class A{
    public String show(D obj){
        return ("A and D");
    }
    public String show(A obj){
        return ("A and A");
    }
}

class B extends A{
    public String show(A obj){
        return ("B and A");
    }
    public String show(B obj){
        return ("B and B");
    }
}

class C extends B{}
class D extends B{}

public class Test {
    public static void main(String[] args) {
        A a1 = new A();
        A a2 = new B();
        B b = new B();
        C c = new C();
        D d = new D();
        System.out.println("1------"+a1.show(b));
        System.out.println("2------"+a1.show(c));
        System.out.println("3------"+a1.show(d));
        System.out.println("4------"+a2.show(b));
        System.out.println("5------"+a2.show(c));
        System.out.println("6------"+a2.show(d));
        System.out.println("7------"+b.show(b));
        System.out.println("8------"+b.show(c));
        System.out.println("9------"+b.show(d));
    }
}
    输出结果:
    1------A and A
    2------A and A
    3------A and D
    4------B and A
    5------B and A
    6------A and D
    7------B and B
    8------B and B
    9------A and D
    不理解的话可以参考:http://developer.51cto.com/art/200906/130414.htm

当然,这里还有个很重要的概念:向上转型和向下转型。这个也有很多参考的地方,向上就是子类转父类,向下就是相反的。不过需要注意的是:向上转型时,子类会遗失所有的自己的新方法。例如:

class Animal{
    public void eat(){
        System.out.println("animal eat");
    }
}

class Bird extends Animal{
    public void eat(){
        System.out.println("bird eat");
    }
    public void fly(){

    }
}


public class Test {
    public static void main(String[] args) {
        Animal a = new Bird();
        a.eat();//输出bird eat
        //此时就没有了a.fly()方法
    }
}

在向下转型过程中,分为两种情况:

情况一:如果父类引用的对象如果引用的是指向的子类对象,那么在向下转型的过程中是安全的。也就是编译是不会出错误的。

情况二:如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误。

        Animal b = new Bird();//向上转型
        b.eat();  //输出bird eat
        Bird b2 = (Bird)b;//向下转型   编译运行都没有错误
        b2.eat(); //输出bird eat


        Animal animal = new Animal();
//      Bird bird = (Bird)animal;  //编译通过,运行时报java.lang.ClassCastException错误

当然一般可以用instanceof关键字来进行判断
具体可以参考:

http://www.cnblogs.com/jack204/archive/2012/10/29/2745150.html

http://blog.csdn.net/cyq1028/article/details/6879088

http://www.cnblogs.com/qinqinmeiren/archive/2011/07/15/2151687.html

http://www.cnblogs.com/fickleness/archive/2013/06/21/3149011.html

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

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

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

面向对象的特点,封装性,继承性,多态性!

1.面向对象程序设计有三大特点,分别是封装,继承,多态,接下来就介绍一下这三个特点,积累一下。 2.封装,封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体是...
  • u012561176
  • u012561176
  • 2015年01月29日 19:37
  • 1634

Java三大特性总结

一、继承: 一个类继承另一个类,则继承的类为子类,被继承的类为父类。它的目的就是实现代码的复用。子类继承父类后就自动拥有了父类的属性和方法,但是,父类的私有属性和构造方法并不能被继承。另外,继承...
  • u011641865
  • u011641865
  • 2016年04月10日 23:12
  • 888

Java的三大特性浅谈

众所周知,Java面向对象的三大特性是封装、继承、多态。 封装:指的是类、属性、方法的封装,把功能相同的代码封装成类或者方法。 继承:指的是一个类从另外一个类中获得属性和方法的过程。 多态:指的...
  • y15883626567
  • y15883626567
  • 2015年05月06日 17:52
  • 373

java提高篇(二)-----理解java的三大特性之继承

在《Think in java》中有这样一句话:复用代码是Java众多引人注目的功能之一。但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情。在这句话中最引人注...
  • chenssy
  • chenssy
  • 2013年10月16日 19:37
  • 20554

Java三大特性的理解

本人刚入行,Java开发;对于Java中三大特性的理解,有自己的一些感悟,分享出来,和大家讨论下,请网友们给予批评和指正~ Java的三大特性--[封装],[继承],[多态] 在此之前,我觉得应该...
  • luxun2014
  • luxun2014
  • 2014年11月29日 02:22
  • 1062

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

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

Java基础之三大特性

前言Java是一种彻底的面向对象编程语言什么是面向对象面向对象是一种思想,是基于面向过程而言,就是说面向对象的功能是通过对象来实现的,将功能封装近对象中,让对象去实现具体细节。特点:1、.将复杂的事情...
  • u011921490
  • u011921490
  • 2015年07月10日 09:33
  • 468

Java编程:并发编程的3个特性

在并发编程中我们经常会遇到三个问题:原子性问题、可见性问题、有序性问题,下面为大家剖析一下这三个问题。如有不正之处,欢迎批评指正。1、原子性 原子行:即一个或者多个操作作为一个整体,要么全部执行,要...
  • claram
  • claram
  • 2016年06月15日 17:19
  • 4923

Java基础:面向对象三大特征、五大原则

面向对象三大特征: (1)封装(Encapsulation) 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特...
  • jiq408694711
  • jiq408694711
  • 2015年06月22日 13:57
  • 5857
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA三大特性之三---多态性
举报原因:
原因补充:

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