多态
多态:对象在不同时刻表现出来的不同状态 成员特点:方法有重写,变量没有重写 优点:提高了扩展性和可维护性 前提条件: A. 要有继承关系(或者实现关系) B. 要有方法重写 C. 要有父类(或接口)引用指向子类对象
Fu f = new Fu() ; // f是父类的引用 Zi z = new Zi() ; // new Zi()是new的子类对象
Fu f = new Zi(); // 向上转型 Zi z = (Zi)f; // 向下转型
Java.lang.ClassCastException 类型转换以异常(类型不匹配)
运行时成员变量和成员方法都是看的左边。父类没有的就无法访问
弊端:父类引用不能使用子类特有的功能 基本类型:隐式转换(从小到大) 强制转换(从大到小) 引用类型:向上转型(从小到大) 向下转型(从大到小) 子类内存地址值赋给父类 父类内存地址值赋值给子类
抽象类(必须要用abstract修饰)
定义:含有抽象方法的类为抽象类,或者由abstract关键字修饰的类。 提取方法声明 没有方法体: public abstract void eat ( ) ; 有抽象方法的类为抽象类,也要用abstract 特点: A. 抽象方法和抽象类用关键字abstract表示 B. 含有抽象方法的类一定是抽象类(或者接口),抽象类中不一定有抽象方法 C. 抽象类不能被实例化,不能够创建对象。(可以通过子类实例化) D. 抽象类中可以有构造方法 E. 如果一个类继承抽象类,那么这个类 要么本身也是抽象类,要么这个类重写父类的所有抽象方法。 作用: 强制要求子类必须完成某种功能方法 成员特点: A. 成员变量 可以有成员变量,也可以有常量 B. 构造方法 有构造方法 (子类构造对象时初始化父类成员) C. 成员方法 有抽象方法也可有非抽象方法 抽象方法:强制要求子类完成某种功能方法 非抽象方法:提高代码复用性,被子类继承 Abstract 不可以和final(不能继承和重写)、private(子类无法访问父类,更无法重写)、static(随着类的加载而加载,对象未建立,没有方法体)
接口(interface)
定义:对外暴露的规则,降低类间的耦合性。 要求: 特殊的抽象类,只存在抽象方法。 必须要有具体的类来实现(implements) 所有的抽象方法都必须得到重写 基本特点: A. 接口不能够被实例化 B. 接口中的方法:要么被子类重写,要么子类也是抽象类 C. 要由子类去实现 成员特点(成员变量、成员方法、构造方法): A. 成员变量:接口中只有常量(接口成员变量默认修饰符:public static final 自行给出修饰符)访问权限必须为public B. 构造方法:没有构造方法(接口中只有常量,不需要赋值初始化)任何类如果没有继承父类,那么这个类就继承自object类 C. 成员方法:接口中方法都是抽象的,且权限必须为public (默认修饰符:public abstract)
接口和抽象类的区别: A. 成员变量、成员常量、普通方法、构造方法、 B. 关系:继承关系 java可以实现接口的多继承 C. 设计理念:接口是更加抽象的一种规则 所有类都直接或者间接的继承自object类,object是所有类的超类
类和接口之间的关系
类与类:继承关系,而且只能单继承,可以多层继承 类与接口:实现关系,可以单实现,也可以多实现。 并且还可以在继承一个类的同时,实现多个接口 接口与接口:继承关系。可以单继承,也可以多继承。 抽象类:体现关系 is a (定义的是整个继承体系的共性内容) 接口:体现关系like a (定义的是整个体系中的扩展内容) 接口是一种特殊的抽象类,比抽象类更抽象!
|