子类可以赋值给超类,称之为向上转型,这个是自动的。

超类不可以赋值给子类,这个是向下转型,需要我们手动实现。

赋值给超类的子类引用在运行期间将表现出不同的特性,这就是多态。

小类型    可转换为   大类型

大类型   转小类型需要   强制转换

对于存在继承关系的强制类型转换:

子类转换为父类属于向上塑型,可以直接转换

父类转换为子类属于向下塑型,需要强制类型转换,但是不一定成功。成功的条件是这个父类是经过子类向上塑型转换来的

即 :Father father=new Son(); Son son=(Son)father;

对于不存在继承关系的强制类型转换,一般都是失败的(如果不写转换方法的话)

即:

子类可转为父类,父类不可以转为子类(如果不用强制类型转换)

1.  子类和父类含有相同的成员变量的时候,访问的是父类的成员变量

2.  子类和父类含有相同的成员方法是,访问的是子类的成员方法

3.  子类和父类含有相同的静态函数和静态方法时,访问的是父类的。

4.  父类不能访问子类特有成员和方法(强制类型转换除外)

也就是说,只有在访问成员方法的时候,才会表现出多态。

或者说:

对象多态时:

1.成员变量:(不涉及覆盖)
编译时: 参考引用变量所属的类中是否有调用的成员变量, 有, 编译通过,没有,编译失败。
运行时: 参考引用变量所属的类中是否有调用的成员变量, 并运行该类所属中的成员变量。
简单的说:编译和运行都参考等号的左边。
2.成员函数(非静态):
编译时:参考引用变量所属的类中是否有调用的成员变量, 有, 编译通过, 没有,编译失败:
运行时:参考的是对象所属的类中是否有调用的函数。
简单的说:编译看左边, 运行看右边。
3.静态函数, 变量:
   编译和运行都是参考左边参数类型!
   其实静态方法不存在多态, 静态方法是属于类的,我们说的是对象的多态!静态方法直接用类名调用就好了,
   没必要创建对象!
   静态的方法只能被静态的方法所覆盖!

java多态和强制类型转换的更多相关文章

  1. 《Java基础知识》Java多态对象的类型转换

    这里所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象.当对不存在继承关系的对象进行强制类型转换时,java 运行时将抛出 java.lang.ClassCastException 异常. ...

  2. 慕课网-安卓工程师初养成-2-10 Java中的强制类型转换

    来源:http://www.imooc.com/code/1241 相信小伙伴们也发现了,尽管自动类型转换是很方便的,但并不能满足所有的编程需要. 例如,当程序中需要将 double 型变量的值赋给一 ...

  3. 今天聊一聊Java引用类型的强制类型转换

    实际上基本类型也是存在强制类型转换的,这里简单提一下.概括来讲分为两种: 1.自动类型转换,也叫隐式类型转换,即数据范围小的转换为数据范围大的,此时编译器自动完成类型转换,无需我们写代码 2.强制类型 ...

  4. Java中的强制类型转换

    例如,当程序中需要将 double 型变量的值赋给一个 int 型变量,该如何实现呢? 显然,这种转换是不会自动进行的!因为 int 型的存储范围比 double 型的小.此时就需要通过强制类型转换来 ...

  5. Java中如何强制类型转换

    例如,当程序中需要将 double 型变量的值赋给一个 int 型变量,该如何实现呢? 显然,这种转换是不会自动进行的!因为 int 型的存储范围比 double 型的小.此时就需要通过强制类型转换来 ...

  6. Java中的基本类型转换,数据溢出原理

    java中的数据类型 java是一种强类型语言,在java中,数据类型主要有两大类,基本数据类型和引用数据类型,不同的数据类型有不同的数据存储方式和分配的内存大小. 基本数据类型中,各数据类型所表示的 ...

  7. c#中的里氏转换和Java中强制类型转换在多态中的应用

    在c#中: 注意: 子类并没有继承父类的构造函数,而是会默认调用父类那个无参数的构造函数. 如果一个子类继承了一个父类,那么这个子类除了可以使用自己的成员外,还可以使用从父类那里继承过来的成员.但是父 ...

  8. java面向对象类的继承~ 匿名类 ;多态特性;强制类型转换

    类的继承 创建子类语法:     修饰符 class 子类名 extends 父类名{        } 匿名子类语法: 直接实例化,过程中通过匿名类 继承父类,在实例化过程中将子类匿名 <父类 ...

  9. Java学习笔记二十六:Java多态中的引用类型转换

    Java多态中的引用类型转换 引用类型转换: 1.向上类型转换(隐式/自动类型转换),是小类型到大类型的转换: 2.向下类型转换(强制类型转换),是大类型到小类型的转换: 3.instanceof运算 ...

随机推荐

  1. debian下蓝牙适配器的配置和使用

    本文打算将蓝牙适配器和手机蓝牙进行配对. 买了个支持蓝牙4.0协议的蓝牙适配器,将其插入到pc(debian 7.4)的usb口. 查看手机蓝牙信息: 选择手机中"设置"-> ...

  2. OJ 之 FATE

                                            - FATE Crawling in process... Crawling failed Time Limit:100 ...

  3. SDN关键技术-Segment Routing协议简介

    当前,SDN作为一种新的网络架构,已经成为行业高度关注的热点.其倡导的开放式网络,代表了从网络应用适应网络能力向网络能力主动适配网络应用需求这个网络建设理念的改变.转发与控制分离.集中的控制层面.开放 ...

  4. PHP 使用header函数设置HTTP头的示例解析 表头

    PHP 使用header函数设置HTTP头的示例解析 表头 //定义编码 header( 'Content-Type:text/html;charset=utf-8 '); //Atom header ...

  5. 两个stack实现一个queue

    package com.hzins.suanfa; import java.util.Stack; /** * 两个stack实现一个queue * @author Administrator * * ...

  6. linux命令学习笔记(37):date命令

    在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,熟练运用date命令 来表示自己想要表示的时间,肯定可以给自己的工作带来诸多方便. .命令格式: date [参数 ...

  7. JavaWEB - 静态include指令、动态Include指令

    (一)使用静态include指令 <%@ page language="java" contentType="text/html; charset=gb2312&q ...

  8. the referenced script on this behaviour is missing!

    1.看看你脚本上挂的某个组件是不是发生了变动,比如被删除了什么的 2.最有可能的是你创建完脚本后,中途改过脚本的名字,致使脚本名字和内部的名字不统一.

  9. C语言小程序(八)、统计字母个数

    这么简单的程序本不应贴在这里,但每写一篇博客,积分涨10分,距离摆脱千里之外的排名又进一步,相当于刷榜了,哈哈! #include <stdio.h> #include <strin ...

  10. Mybatis学习--Sql语句构建器

    学习笔记,选自Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/statement-builders.html 问题 Java程序员面对的最痛苦的事情 ...