A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Zrz_K 中级黑马   /  2015-12-15 20:58  /  854 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多态  --Polymorphic
file:///D:/Personal/Documents/My%20Knowledge/temp/bbc22431-1956-4adc-aacd-a349f41be144_4_files/unchecked.png多态的概述:事物存在的多种形态。  Animal a = new Cat();
file:///D:/Personal/Documents/My%20Knowledge/temp/bbc22431-1956-4adc-aacd-a349f41be144_4_files/unchecked.png多态的前提:
  • a:要有继承关系。(或实现关系)
  • b:要有方法重写。(多态的意义所在)
  • c:要有父类引用指向子类对象。(多态的核心原理)

file:///D:/Personal/Documents/My%20Knowledge/temp/bbc22431-1956-4adc-aacd-a349f41be144_4_files/unchecked.png多态中成员的访问特点:
  • 成员变量:
  • 编译看左边,运行也是看左边。 -- 都是父类,成员变量没有重写的概念。

  • 成员方法:
    • 非静态:    编译看左边,运行看右边。 -- 成员方法存在着重写的概念(动态绑定)。       
    • 静态:    编译看左边,运行也是看左边。--算不算重写,静态方法与类相关跟着类走。


file:///D:/Personal/Documents/My%20Knowledge/temp/bbc22431-1956-4adc-aacd-a349f41be144_4_files/unchecked.png多态中,父类的引用不能使用子类特有的方法。
        解决:向上转型和向下转型。
        Animal a = new Cat(); // 隐含着一个向上转型。
        Cat c = (Cat) a; // 向下转型

file:///D:/Personal/Documents/My%20Knowledge/temp/bbc22431-1956-4adc-aacd-a349f41be144_4_files/unchecked.png多态的好处和弊端
  • A:多态的好处
    • a:提高了代码的维护性(继承保证)
    • b:提高了代码的扩展性(多态保证:父类当作形式参数,可以接收任意子类对象)  --开发中最常用到多态的方式
  • B:多态的弊端
    • 不能使用子类的特有属性和行为。(向下转型解决)


file:///D:/Personal/Documents/My%20Knowledge/temp/bbc22431-1956-4adc-aacd-a349f41be144_4_files/unchecked.pngClassCastException:

类型转换异常    ---向下转型只能转成对象本来就是的那个类型或者其父类型。

file:///D:/Personal/Documents/My%20Knowledge/temp/bbc22431-1956-4adc-aacd-a349f41be144_4_files/unchecked.pnginstanceof:

判断前面的引用是否为后面的数据类型,用于子类传入形式参数后,向下转型并调用子类特有方法。
if (a instance of Cat) {Cat c = (Cat)a ; ......}


file:///D:/Personal/Documents/My%20Knowledge/temp/bbc22431-1956-4adc-aacd-a349f41be144_4_files/unchecked.png一个完整的有子父关系的内存图(关于变量和方法的调用)

file:///D:/Personal/Documents/My%20Knowledge/temp/bbc22431-1956-4adc-aacd-a349f41be144_4_files/c98c70b2-c100-4ba5-8e42-7de0a11c178e.png




抽象类 --Abstract

file:///D:/Personal/Documents/My%20Knowledge/temp/bbc22431-1956-4adc-aacd-a349f41be144_4_files/unchecked.png抽象类概述
  • 体系内的共性内容向上抽取,形成一个抽象的概念
file:///D:/Personal/Documents/My%20Knowledge/temp/bbc22431-1956-4adc-aacd-a349f41be144_4_files/unchecked.png抽象类特点
  • a:抽象类和抽象方法必须用abstract关键字修饰
    • abstract class 类名 {}
    • public abstract void eat();
  • b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口
  • c:抽象类不能实例化
  • d:抽象类的子类
    • 要么是抽象类
    • 要么重写抽象类中的所有抽象方法
file:///D:/Personal/Documents/My%20Knowledge/temp/bbc22431-1956-4adc-aacd-a349f41be144_4_files/unchecked.png抽象类的成员特点
  • a:成员变量:既可以是变量,也可以是常量。(变量的抽象无意义
  • b:构造方法:有   -- 子类访问父类成员之前,保证父类的数据初始化
  • c:成员方法:既可以是抽象的,也可以是非抽象的。
    • a:抽象方法 --强制要求子类做的事情(给子类定义规则
    • b:非抽象方法 --供子类继承,提高代码复用性。
抽象类中的面试题file:///D:/Personal/Documents/My%20Knowledge/temp/bbc22431-1956-4adc-aacd-a349f41be144_4_files/unchecked.png一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?

    • 可以,目的是为了不让其他类创建本类对象,交给子类完成(适配器模式)
file:///D:/Personal/Documents/My%20Knowledge/temp/bbc22431-1956-4adc-aacd-a349f41be144_4_files/unchecked.pngabstract不能和哪些关键字共存?

    • final         final修饰无法创建子类或方法不能被重写,与abstract方法必须被重写冲突。
    • static        static修饰后可以直接类名.方法名调用,对于abstract方法无意义因为其无方法主体。
    • private    方法private后,子类无法访问,更不可能重写。









3 个回复

倒序浏览
day09  6666666
回复 使用道具 举报
问,这些都是要背下来不,我觉得只能理解,要背的话还是有差距的啊
回复 使用道具 举报
写的不错!!!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马