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运算符事应该注意,前面的操作数的编译类型要么与后面的类相同,要么是后面类的父类,否则会引起编译错误。

 

相关文章推荐

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

如有错误,请指出,我会第一时间改正。

小结多态

小结多态 1.  多态的体现      父类的引用指向子类对象 2. 多态的前提     类与类之间要存在关系,要么是继承,要么是实现关系。但存在覆盖。 3. 多态的好处  &#...

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

多      态      1、动态多态的实现原理     2、多态的类别及实现方法     3、动态多态的四种情况 (2)多态的类别及实现方法 2.1 静态多态:编译时多态、函数的多态性,重...

Java多态的讲解

java 多态实例

Java多态--- 如何匹配的呢?

题目如下 匹配原则: 先: 确保参数完全匹配O的前提下,依次匹配this与super。 再: 考虑参数用super(O)渐近匹配O,依次匹配this与super 当: 存在子类覆盖父...

java多态小结

  • 2012-01-11 11:11
  • 304KB
  • 下载

黑马程序员java学习笔记——面向对象的特征封装、继承和多态

感觉面向对象是在java中比较难的内容,但也是核心内容,毕竟写代码思想是很重要的,面向对象就是一种思想,精通这种思想,编程就会变的简单。下面就是我学完面向对象这一部分做的笔记。     面向对象   ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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