Java多态小结

转载 2012年03月30日 22:35:31
class BaseClass{
     public int book=6;
     public void book(){
             System.out.println("父类的普通方法");
     }
}


面向对象之多态(疯狂Java讲义学习心得)

为什么会出现多态?

Java中的引用变量有两个类型,一个是编译时的类型,一个是运行时的类型,编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给该变量的对象决定。如果编译时的类型与运行时的类型不一致就会出现所谓的多态。(Polymorphism)

例题如下:

 

现实生活中也有多态的原型:例如一个父亲F有两个孩子S1S2,而父亲又可以代表孩子做一些事情,即F即可以代表S1也可以代表S2,因此F具有一定的多态性。在Java中多态大多是指对象变量的多态,即一个F类型的变量既可以指向F类型的对象也可以指向S1S2类型的对象。(FS1S2之间需要存在继承关系)

注意:除了上述多态形式外,一个接口类型变量也可以指向其实现类的实例,这也是多态的一种表现。

(参考:《你必须知道的261Java问题》)

哈哈,上面的这幅图是不是很形象?吃糖相当于方法,而年龄则相当与属性。

关于强制类型转换

v     基本类型之间的强制转换只能在数值之间进行,这里所说的数值类型包括整数型、字符型和浮点型。但数值型不能和布尔型之间进行转换。

v     引用类型之间的转换只能把一个父类变量转换成子类类型,如果两个没有继承关系的类型,则无法进行类型转换,否则编译时会出现错误。如果试图把一个父类实例转换子类类型,则必须这个对象实际上是子类才行(即编译时类型为父类类型,而运行时类型是子类类型),否则在运行时会发生ClassCastException异常。

为了避免出现ClassCastException异常,可以使用instance of运算符判断是否可以转型成功。前面的程序可以加上:

If(objStr instanceof String){

String str=(String) objPri;

}

注意点:

当把子类对象赋给父类时,被称为向上转型(upcasting,这种转型总是可以完成的,这也从一个侧面证明了子类是一种特殊的父类。这种转型只是表明这个引用变量的编译类型是父类,但实际执行他的方法时,依然表现出子类对象的行为方式。但把一个父类对象赋给子类引用变量时,就需要进行强制类型转换。

instanceof运算符的前一个数通常是一个引用类型的变量,后一个操作数通常是一个类(也可以是接口,可以把接口理解成一种特殊的类),它用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。如果是则返回true,否则返回false

使用instanceof运算符事应该注意,前面的操作数的编译类型要么与后面的类相同,要么是后面类的父类,否则会引起编译错误。

 

【java】【多态】的一个小例子

首先要了解什么是多态? :在面向对象语言中,接口的多种不同的实现方式即为多态。具体来说,就是不同子类作为参数使用同一父类的方法 时的实现方法是不同的。   多态的表现形式有哪些? 1.重载ov...
  • NeoAdrian
  • NeoAdrian
  • 2016年04月10日 14:41
  • 2326

深入理解Java虚拟机--运行时栈帧结构

栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构。它是虚拟机运行时数据区的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。        在编译程序代码时,栈...
  • u010010428
  • u010010428
  • 2016年07月16日 10:22
  • 1344

Java 继承与多态实验

实验讲义   上机题目一:试以Point类为例,尝试对Object类的clone()方法和equal()方法进行覆盖。 上机题目二:现在输入n个数字,以逗号分开、放入一个字符串中,然后按升序和降序排序...
  • u014253173
  • u014253173
  • 2014年04月12日 11:28
  • 1691

C#多态小结——面向对象编程的三大机制之二

C#的多态性: 我的理解是:同一个操作,作用于不同的对象时,会有不同的结果,即同一个方法根据需要,作用于不同的对象时,会有不同的实现。 通过继承实现的不同对象调用相同的方法,表现出不同的行...
  • xiaoyusmile
  • xiaoyusmile
  • 2014年08月18日 17:54
  • 399

类小结1:方法重载 变量 封装 import 继承 重写父类方法 调用父类构造方法 多态

方法重载 变量 封装 import 继承 重写父类方法 调用父类构造方法 多态
  • qq_29422251
  • qq_29422251
  • 2016年05月24日 21:10
  • 456

C++小结——表-类-继承-多态-模板-异常-智能指针

如有错误,请指出,我会第一时间改正。
  • sinat_36118270
  • sinat_36118270
  • 2017年04月09日 11:46
  • 214

C++ +小结2 继承, 多态和引用

#include using namespace std; // 继承机制 class Animal { public: // 如果在父类中只定义了一个有参数的构造函数,而没有显示定一个...
  • zhaoxiatengkong_1
  • zhaoxiatengkong_1
  • 2013年08月08日 16:25
  • 851

小结多态

小结多态 1.  多态的体现      父类的引用指向子类对象 2. 多态的前提     类与类之间要存在关系,要么是继承,要么是实现关系。但存在覆盖。 3. 多态的好处     提高了代...
  • liyi4337222
  • liyi4337222
  • 2012年07月31日 11:09
  • 290

.NET项目开发—浅谈面向对象的纵横向关系、多态入口,单元测试(项目小结)

在一般的函数调用情况下,我们都习惯性的将参数传入到某个被调用的方法,这可能就是我们考虑调用方法的惯用思维,但是现在的C#语言得到了很大的提升,我们可以很自然的使用委托来减少函数之间的参数依赖;有时候会...
  • wangqingpei557
  • wangqingpei557
  • 2013年11月20日 20:23
  • 1338

C++小结:多态(2) --类别与实现、动态多态

多      态      1、动态多态的实现原理     2、多态的类别及实现方法     3、动态多态的四种情况 (2)多态的类别及实现方法 2.1 静态多态:编译时多态、函数的多态性,重...
  • dot2636268966
  • dot2636268966
  • 2015年08月07日 16:29
  • 214
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java多态小结
举报原因:
原因补充:

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