zoukankan      html  css  js  c++  java
  • 面向对象——多态

    多态就是对象的多种形态。
    1.引用多态   
      父类的引用可以指向本类的对象;
      父类的引用可以指向子类的对象;
    2.方法多态
      根据上述创建的两个对象:本类对象和子类对象,同样都是父类的引用,当我们指向不同的对象时,它们调用的方法也是多态的。
      创建本类对象时,调用的方法为本类方法;
      创建子类对象时,调用的方法为子类重写的方法或者继承的方法;
      使用多态的时候要注意:如果我们在子类中编写一个独有的方法(没有继承父类的方法),此时就不能通过父类的引用创建的子类对象来调用该方法!!!
      注意: 继承是多态的基础。
    A、引用类型转换 
     了解了多态的含义后,我们在日常使用多态的特性时经常需要进行引用类型转换。
     引用类型转换:
     1. 向上类型转换(隐式/自动类型转换),是小类型转换到大类型。
      就以上述的父类Animal和一个子类Dog来说明,当父类的引用可以指向子类的对象时,就是向上类型转换。
    2. 向下类型转换(强制类型转换),是大类型转换到小类型(有风险,可能出现数据溢出)。
      将上述代码再加上一行,我们再次将父类转换为子类引用,那么会出现错误,编译器不允许我们直接这么做,虽然我们知道这个父类引用指向的就是子类对象,但是编译器认为这种转换是存在风险的。
    但是如果父类引用没有指向该子类的对象,则不能向下类型转换,虽然编译器不会报错,但是运行的时候程序会出错
    3. instance of运算符,来解决引用对象的类型,避免类型转换的安全性问题。
      instance of是Java的一个二元操作符,和==,>,<是同一类东东。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。

    B、抽象类
     定义:抽象类前使用abstract关键字修饰,则该类为抽象类。
     使用抽象类要注意以下几点:
      1. 抽象类是约束子类必须有什么方法,而并不关注子类如何实现这些方法。
      2. 抽象类应用场景:
       a. 在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法(可实现动态多态)。
       b. 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免子类设计的随意性。
      3. 抽象类定义抽象方法,只有声明,不需要实现。抽象方法没有方法体以分号结束,抽象方法必须用abstract关键字来修饰。

    4、包含抽象方法的类是抽象类。抽象类中可以包含普通的方法,也可以没有抽象方法。

    5.抽象类不能直接创建,可以定义引用变量来指向子类对象,来实现抽象方法。

    C、接口
      概念
      接口可以理解为一种特殊的类,由全局常量和公共的抽象方法所组成。也可理解为一个特殊的抽象类,因为它含有抽象方法。
       如果说类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供的某些方法。
    使用接口
      一个类可以实现一个或多个接口,实现接口使用implements关键字。java中一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以补充。

  • 相关阅读:
    Python 运算符优先级
    一起谈.NET技术,HubbleDotNet 和 Lucene.Net 匹配相关度的比较 狼人:
    一起谈.NET技术,Asp优化,asp缓存技术 狼人:
    一起谈.NET技术,MonoTouch中的MVC简介 狼人:
    一起谈.NET技术,如何成为人尽皆知的C#开发人员 狼人:
    一起谈.NET技术,如何解决分布式系统中的跨时区问题[原理篇] 狼人:
    一起谈.NET技术,WCF使用NetTcp传输文件 狼人:
    一起谈.NET技术,ASP.NET 项目安装包制作(二)数据库安装、其他组件的安装 狼人:
    一起谈.NET技术,如何解决分布式系统中的跨时区问题[实例篇] 狼人:
    一起谈.NET技术,模拟IIS向Silverlight输出策略文件 狼人:
  • 原文地址:https://www.cnblogs.com/clearlove007/p/13977668.html
Copyright © 2011-2022 走看看