抽象类
抽象方法:由abstract 修饰的方法为抽象方法,抽象方法只有方法的定义,没有方法体实现,用一个分号结尾。
抽象类:一个类中如果包含抽象方法,就应该用 abstract 关键字声明为抽象类。
一个抽象类中可以没有抽象方法,但有抽象方法的类一定是抽象类。
可以没有抽象方法,抽象类不能建立对象,所以无法实例化
如果一个类继承了抽象类,必须重写其抽象方法(除非该类也声明为抽象类)
abstract 和final关键字不可以同时用于修饰一个类,因为final 关键字使得类不可继承,而abstract 修饰的类如果不可以继承将没有任何意义。也不能与private, static 共存
抽象类的意义:为其子类提供一个公共的类型;封装子类中的重复内容;
定义有抽象方法,子类虽然有不同的实现,但该方法的定义是一致的。
抽象类的成员特点:
成员变量:
静态 可以,类名直接调用
非静态 可以,子类对象调用
构造方法:
有构造方法,但是不能实例化,作用:用于子类访问父类数据的初始化
成员方法:
静态 普通方法,有方法体,可以,类名直接调用
非静态普通方法,有方法体,可以,子类对象调用
抽象类的抽象方法,用于限定子类必须完成某些动作
抽象类的非抽象方法,用于提高代码的复用性
没有抽象方法的抽象类,存在有适配器意义
接口中成员的定义:接口没有构造方法
成员变量:public static final数据类型变量名 = 初始化值; // 需要初始化,只能常量
成员方法:public abstract返回值类型方法名(); // 全抽象,不能建立对象
修饰符都是固定模式,少写或不写,编译时会自动补全
一个类实现了某个接口后必须实现该接口中定义的所有方法,否则还是抽象类。
接口中的多态:接口可以作为一种类型声明变量,一个接口类型的变量可以引用实现了该接口的类的对象;通过该变量可以调用该接口中定义的方法(具体的实现类提供了方法的实现)。即接口引用指向实现类的对象
一个类多实现接口是没有安全隐患的:接口方法没有方法体,根本不能运行,接口方法怎么实现功能,完全由实现类重写决定。
实现类如果实现多个接口,接口中的全部抽象方法都要覆盖,包括接口继承的的父类的抽象方法。
接口的意义:降低程序的耦合性,提高程序的扩展性。
类和接口之间的关系:
类与类之间是继承关系,单继承,可以多层继承
类与接口之间是实现关系,可以多实现
接口与接口之间是继承关系,支持多继承
Java 中支持多继承吗? 类与类之间是单继承,接口之间可以多继承。
抽象类和接口的区别:
成员区别:
抽象类:变量,常量;抽象方法,非抽象方法;构造方法
接口:常量;抽象方法;没有构造方法
关系区别:(继承与实现)
设计理念区别:
抽象类:is a 关系,共性功能
接口:like a 关系,扩展功能 |
|