10.8-抽象类、接口与多态
抽象类
抽象(abstract):笼统、模糊、不具体
抽象类的特点
方法只有声明没有实现时(没有方法体),该方法就是一个抽象方法,需要被
abstract
修饰;且抽象方法必须定义在抽象类中,此类也需要被abstract
修饰。抽象类不可以被实例化(不可以使用new)
抽象类必须由其子类覆盖了所有的抽象方法后,该子类才可以实例化;否则,这个子类仍为抽象类。
抽象类和抽象方法非常适合做”系统的分析和设计的工具“。
注意问题
抽象类中拥有构造器,用于给子类进行初始化。
抽象类中可以不定义抽象方法,但此行为比较少见。
抽象关键字不可以和
private
static
final
关键字共存。抽象类一定是父类。
一般类和抽象类的的异同
抽象类和一般类都是用来描述事物的,都在内部定义了成员。
抽象类描述事物的信息可能不足,一般类则有足够的信息描述事物。
一般类中不能定义抽象方法,但抽象类中可以定义抽象方法,也可以定义非抽象方法。
一般类可以被实例化,但抽象类不可以被实例化。
接口(interface)
格式
interface 接口名{
}
注意问题
接口中成员的修饰符都是固定的
成员常量:
public static final
成员方法:
public abstract
类与类之间可以是继承(extends)关系,类与接口之间是实现(implements)关系。
接口不可以被实例化,只能由实现了接口的子类覆盖了接口中所有的抽象方法中,该子类(实现类)才可以实例化;否则该实现类依旧为抽象类。
特点
接口是一个特殊的抽象类(纯抽象类)
接口是程序的功能扩展
接口的出现降低了代码的耦合性
耦合性:也成为块间联系;指的是软件系统结构中各个模块之间相互联系紧密程度的一种度量。
内聚性:也称为块内联系;指的是模块内部各个元素之间相互联系紧密程度的一种度量。
接口可以用来多实现。
类与接口之间是实现关系,而且一个类在继承另外一个类的同时还可以实现多个接口。
接口中的属性默认是常量。
接口中的方法一定是
public abstract
修饰的。接口和接口之间,可以有多继承关系。
抽象类与接口的不同
抽象类需要被继承,而且只可以单继承;接口需要被实现,而且可以多实现。
抽象类既可以定义抽象方法,也可以定义非抽象方法;接口中只能定义抽象方法。
抽象类中有构造器,但接口中没有构造器。
多态
方法的多态
方法的重载
对象的多态
父类型引用指向子类的对象
class Animal{}
class Cat extends Animal{}
Animal a = new Cat();
instanceof运算符
Java中的instance运算符是一个二元运算符,它的作用是用来判断该运算符左边的对象是否属于右边类的实例
多态的特点
成员变量
编译时
参考引用类型变量所属的类中是否有调用的成员变量。有,编译通过;无,编译失败。
运行时
参考引用类型变量所属的类中是否有调用的成员变量。并运行该所属类中的成员变量。
简单说
编译与运行都看左边的类型
成员方法
编译时
参考引用类型变量所属的类中是否有调用的成员方法。有,编译通过;无,编译失败。
运行时
参考对象所属的类中是否有调用的成员方法
简单说
编译看左边,运行看右边
访问控制修饰符
修饰Java类、属性、方法的可见范围
类内 包内 子类 任意
public √ √ √ √ protected √ √ √ default √ √ private √
private:私有的,仅仅在类的内部可见 public:公有的,任意位置可见 protected:受保护的,在同一个包中和子类中可见 default:默认的,什么都不写,在同一包中可见
访问控制的原则:尽可能的封装
JavaBean
指的是符合某种特点规范的Java类
规范
所有的属性私有化
提供默认的构造器
提供所有属性的get/set方法
实现Serializable接口(序列化接口)
最后更新于