博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javase中多态polymorphic的简单介绍
阅读量:4610 次
发布时间:2019-06-09

本文共 2390 字,大约阅读时间需要 7 分钟。

-------------多态-----------------

   (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    }}

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

转载于:https://www.cnblogs.com/wing411/p/4735131.html

你可能感兴趣的文章
DOC常用命令(转)
查看>>
php写一个判断是否有cookie的脚本
查看>>
Mac配置Fiddler抓包工具
查看>>
转:Java并发集合
查看>>
Word截图PNG,并压缩图片大小
查看>>
Python项目对接CAS方案
查看>>
mysql产生随机数
查看>>
编程风格
查看>>
熟悉常用的Linux命令
查看>>
易之 - 我是个大师(2014年3月6日)
查看>>
Delphi中窗体的事件
查看>>
file_get_contents()获取https出现这个错误Unable to find the wrapper “https” – did
查看>>
Error:Syntax error: redirection unexpected
查看>>
linux vi编辑器
查看>>
js树形结构-----(BST)二叉树增删查
查看>>
contract
查看>>
FJUT ACM 1899 Largest Rectangle in a Histogram
查看>>
如何删除xcode项目中不再使用的图片资源
查看>>
编写用例文档
查看>>
解决WPF两个图片控件显示相同图片因线程占用,其中一个显示不全的问题
查看>>