-------------多态-----------------
   (1)面向对象三大核心思想;
       1、封装 2、继承 3、多态
   (2)多态定义:父类的引用指向子类的对象。
     (3)引用指的是父类声明的一个引用型变量,变量有: 1、成员变量
                           2、静态变量
                           3、构造方法的变量
                           4、普通方法的变量
                           5、声明就用的变量
   (4)变量的声明一般来说需要三步:声明数据类型 声明变量名 赋值
     但是严格来讲为两步:声明数据类型 声明变量名
   (5)赋值有两种情况:1、父类型声明,赋值一个父类型的引用值
     父类型声明,赋值一个子类型的引用值
             2、多态
   (6)里氏替换原则:能使用父类的地方,一定可以使用子类
   (7)多态的概念:
     编译阶段,将父类的属性,生成属性列表,编译时绑定
     运行阶段,将子类生成一个对象,子类也有自身属性列表,运行时绑定
     程序运行时,通过父类的属性去调用子类对象的属性(特指成员方法)
   (8)具体调用:运行阶段
     1、遍历父类的属性列表
     2、遍历子类的属性列表
     3、如果子类有相同,就调用子类的,没有就调用父类的
     4、如果父类没有所指属性,直接报错,子类中不用去

public class Poly01{
public static void main(String[] args){
Big a = new Big();
a.eat();//输出父类
Big b = new Small();
b.eat();//输出子类
//b.happy();//报错:找不到符号
b.cry();//输出父类
}
} class Big{
public void eat(){
System.out.println( "大的吃小的" );
}
public void cry(){
System.out.println( "大的在哭" );
}
}
class Small extends Big{
public void eat(){
System.out.println( "小的不让大的吃" );
}
public void happy(){
System.out.println( "小的很高兴" );
}
}
class Tiny extends Big{
public void eat(){
System.out.println( "很小的" );
}
}

  

  多态发生的前提:有继承关系的两个类中(或说体系)

   多态有两种类型:1、向上转型,这是从数据类型角度,把子类对象当成父类来处理,可看作自动类型转换

          2、向下转型,强制类型转换
   自动类型转换:1、基本数据类型中,低精度向高精度
          2、引用数据类型中,子类向父类
 强制类型转换:1、基本数据类型中,高精度向低精度
        2、引用数据类型中,子类向父类

public class Poly02{
public static void main(String[] args){
//---------向上转型----------
Big a1 = new Small();
a1.eat();//输出子类
//a1.happy();//找不到符号
//向上转型的缺点:对丢失子类对象中特有的属性 //---------向下转型----------
//向下转型是基于某个类的对象向上转型后,才可向下转型
Small a2 = (Small) a1;
a2.happy();//输出子类
a2.cry();//调用父类
a2.eat();//输出子类 //---------instanceof--------
//运算符:判断当前对象是不是某个类实例化而来的
Big a3 = new Tiny();
a3.eat();
//Small b2 = (Small) a3;
//b2.happy();//编译通过,但是java.lang.ClassCastException错误
if (a3 instanceof Small){
Small b2 = (Small)a3;
}
System.out.println(a3 instanceof Small );
//为了避免java.lang.ClassCastException错误,java引入了instanceof运算符
//instanceof运算符,其运算结果是boolean;
// if( 引用 instanceof 类型名)-->true/false
}
}

以上就是我的理解.欢迎大家指导!

Javase中多态polymorphic的简单介绍的更多相关文章

  1. 浏览器中 F12 功能的简单介绍

    chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...

  2. [转]chrome浏览器中 F12 功能的简单介绍

    本文转自:https://www.cnblogs.com/zhuzhubaoya/p/9758648.html chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己 ...

  3. 【F12】chrome浏览器中 F12 功能的简单介绍

    chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...

  4. chrome浏览器中 F12 功能的简单介绍

    chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...

  5. 个人对Java中多态的一些简单理解

    什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...

  6. Java中多态的一些简单理解

    什么是多态 .面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. .多态的定义:指允许不同类的对象对同一消息做出响应.即 ...

  7. Java Web中web.xml文件简单介绍

    参考博客: https://www.cnblogs.com/Y-oung/p/8401549.html 1.XML 声明和根元素 <?xml version="1.0" en ...

  8. 关于如何在其他包中写controller和简单介绍@SpringBootApplication

    本文参考博客:https://blog.csdn.net/u013473691/article/details/52353923 关于@Configuration和@Bean参考博客:https:// ...

  9. 标准C++中的STL容器类简单介绍

    SGI -- Silicon Graphics[Computer System] Inc.硅图[计算机系统]公司. STL -- Standard Template Library 标准模板库.   ...

随机推荐

  1. A题进行时--浙大PAT 1001-1010

    pat链接:http://pat.zju.edu.cn 1 #include<stdio.h> 2 int main(){ 3 int a,b; 4 int c; 5 while(scan ...

  2. BeanPostProcessor 的使用,实现在对象初始化之前或者之后对对象进行操作

    import java.lang.reflect.Field; import org.springframework.beans.BeansException; import org.springfr ...

  3. 各大算法专题-STL篇

    这篇文章着重记录c++中STL的用法.主要粗略的介绍其用法,以知识点的形式呈现其功能,不会深入源码分析其工作原理. 排序和检索. sort(a,a+n),对a[0]往后的n个元素(包括a[0])进行排 ...

  4. php学习小记1

    1.回调函数 c语言中的回调函数:通过函数指针调用的函数.将函数a的指针(地址)作为参数传递给另一个函数b,当函数a的指针被b用来调用a时,这就是回调函数,在特定的事件或条件发生时,由另外一方调用,用 ...

  5. weekend110(Hadoop)的 第一天笔记

    (2015年1月10日) 课程目录 01-hadoop职位需求状况 02-hadoop课程安排 03-hadoop应用场景 04-hadoop对海量数据处理的解决思路 05-hadoop版本选择和伪分 ...

  6. bootstrap-table对前台页面表格的支持

    1.bootstrap-table是在bootstrap的基础上面做了一些封装,所以在使用bootstrap-table之前要导入的js和css有 1)基本的还是jQuery <script t ...

  7. 使用webview如何做超时判断

    在加载网页时给一个timer定时器,规定超时时间,然后再超时时间的方法中提示超时 如果没有超时,则在webview协议中的“加载完成”方法中 取消timer定时器 - (void)openWebVie ...

  8. gulp自己主动化任务脚本在HybridApp开发中的使用

    眼下做前端开发的同学可能都熟悉grunt.fis之类的自己主动化构建工具.事实上在HybridApp开发中我们也能够使用这些工具来简化我们的工作.gulp就是一个比grunt,fis都先进的构建工具. ...

  9. Project interpreter not specified(eclipse+pydev)

    [小记] 近期由于想配置Android的开发环境,把原来的MyEclipse5.5删了,下载了最新的Eclipse3.7版本号,由于之前在进行Python开发,就下载了最新的Pydev2.4版本号,安 ...

  10. xml配置和基于java类的bean配置搭配使用

    如果同时使用了xml配置,和java类的bean配置(当然估计项目中一般不会这样), 在初始化容器指定资源文件的时候可能会比较麻烦 此时我们可以把基于java类的bean配置整合到xml中,或xml的 ...