今天讲的是多态+抽象类+接口,概念性的知识比较多,而且相互之间多少都有些联系,不好理解更不好记,需要多看几遍笔记慢慢消化吸收。老师说这是java基础的重点,所以要多花点时间在这里。Fighting!!!
Day09多态&抽象类&接口 2015/04/15 [size=12.0000pt]1、多态 对象在不同时刻表现出来的不同状态 前提条件: A:要有继承或者实现关系; B:要有方法重写; C:要有父类(接口)引用指向子类对象。格式:Fu fu = new Zi();(父接口引用指向实现类的对象) 多态间的成员特点:方法有重写而变量没有 成员方法:编译看左边,运行看右边。 成员变量:编译看左边,运行看左边。 多态的弊端与解决方案 父类(或接口)引用不能使用子类(或实现类)特有的功能。解决方案:用引用类型转换将大的类型强转成小类型。 引用类型转换:向上转型(小到大)Animal a = new Cat(); 、向下转型(大到小)Cat c = (Cat)a; 类型转化问题: //向下转换时不明确父类类型指向的是哪一个子类类型时,当向下转换时java.lang.ClassCastException 类型转换异常 好处:为了提高代码的扩展性和可维护性。 [size=12.0000pt]2、抽象类 抽象方法:没有方法体的方法。//public abstract void eat(); 抽象类:有抽象方法的类。//abstract class Animal {public abstract void eat();} 基本特点: A:抽象方法和抽象类用关键字abstract修饰; B:有抽象方法的类一定是抽象类(或者接口),抽象类中不一定有抽象; C:抽象类不能被实例化(就是不能被创建new,抽象方法只能通过子类对象进行实例化); D:如果一个类继承抽象类,那么这个类要么本身也是抽象类要么这个类重写父类的所有抽象方法 在继承中选择抽象的父类原因: 强制要求子类必须完成某些功能(其实就是要求子类重写父类中的抽象方法) 抽象类的多态: 成员特点: 成员变量:可以有成员变量和常量 构造方法:有构造方法,为了初始化数据(可以用于子类访问父类数据前对父类数据进行初始化) 成员方法:可以有抽象方法也可以有非抽象方法,抽象方法是为了强制子类做某些事情而非抽象方法是为了提高代码的复用性,被子类继承。 Abstract不可以和static、final、private共存。 [size=12.0000pt]3、接口(interface) 在一个抽象类中,所有的方法都是抽象的 关键字implements:必须要有具体的类来实现 格式:class 类名 implements 接口名 { } 基本特点: A:接口不能被实例化; B:接口中的方法要么被子类重写要么子类也是抽象的 成员特点: 成员变量:接口中只有常量(接口的成员变量都有默认修饰符public static final 变量名,推荐自己给出修饰符。) 成员方法:接口中的方法默认都是抽象的,而且默认是public的。(推荐手动给出修饰符 public abstract 方法名()) 构造方法:没有构造方法。(构造方法是为了初始化父类的,而接口中所有的变量都是常量,所以就不需要构造方法来进行初始化 ) 类和接口的关系: 类与类的关系:继承关系。是单继承的,可以多重(层)继承 类与接口的关系:实现关系。类可以在继承一个类的同时实现多个接口 接口与接口的关系:继承关系。可以单继承也可以多继承。 思想特点: 接口是对外暴露的规则 接口是程序的功能扩展 接口的出现降低了耦合性(耦合是指类与类之间的关系),那样一个类的改变对其他类的影响减小。 编程时要尽量低耦合高内聚 接口可以用来多实现 接口与抽象类的区别: (1)成员特点 抽象类: 成员变量:可以是变量,也可以是常量。 构造方法:有构造方法。 成员方法:可以是抽象方法,也可以是非抽象方法。 接口: 成员变量:只有常量,接口的成员变量都有默认修饰符public static final 成员方法:默认都是公共抽象的,有默认修饰符 public abstract (2)关系特点 类与类的关系:继承关系。是单继承的,可以多重(层)继承 类与接口的关系:实现关系。类可以在继承一个类的同时实现多个接口 接口与接口的关系:继承关系。可以单继承也可以多继承。 (3)设计理念的区别 抽象类被继承,这个类中定义的是整个继承体现的共性内容。(体现:is a) 接口被实现,这个接口中定义的是整个体现的扩展内容。(体现:like a)
|