------------------------------------------------------------------------------------------------------------------
抽象类:(abstract)
继承过后,子类变得越来越具体,父类则更一般,更通用。有时将父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类
抽象类:(可以定义和普通类完全一样的内容)
● 语法:权限修饰符 abstract class 类名称{ }
● 不能被实例化,用来被继承。子类必须重写父类的抽象方法,才能被实例化
● 有构造器(所以的类都有构造器)
● 抽象类中不一定有抽象方法
抽象方法:(只有方法的声明,没有方法的实现。在定义抽象方法时没有方法体和{ },结尾分号结束)
● 语法:权限修饰符 abstract void(或者返回值类型) 方法名(形参列表);
● 抽象方法所在的类一定是抽象类
● 子类如果继承的是抽象的父类(有抽象方法),那么子类必须重写父类的所有抽象方法或者子类也是一个抽象类
● 若子类继承抽象类,并重写所有的抽象方法,则此类是一个“实体类”,即可以实例化
注意:不能用abstract修饰属性、私有方法、构造器、静态方法、final的方法
------------------------------------------------------------------------------------------------------------------
接口:(interface:抽象方法和常量值定义的集合)
接口是一种特殊的抽象类,只包含常量和方法的定义,没有具体的实现。主要用途就是被实现类实现(面向接口编程)
● 接口类语法:权限修饰符 interface 接口名称{ }
● 常量(成员变量)语法:public static final 数据类型 常量名 = 值(其中public static final可以省略,为默认)
● 抽象方法语法:public abstract void(或者返回值类型)方法名(形参列表)(其中public abstract可以省略,为默认)
● 实现接口语法:权限修饰符 class 类名称 implements 接口名称{ }(实现多个接口,接口名称之间使用“,”分隔)
● 实现类可以继承父类也可以实现接口语法:权限修饰符 class 实现类 extends 父类 implements 接口名称{ }
● 对象的引用语法:接口名称 变量名 = new 实现类的名称(接口与实现类之间也存在多态性)
注意:接口没有构造器。它是多继承机制(多个接口使用“,”分隔,类是单继承)。如果没有完全重写接口中的抽象方法,那么这个类一定是抽象类。反之,全部重写,那么它就是一个实体类,可以实例化。在接口中的常量必须初始化值
------------------------------------------------------------------------------------------------------------------
接口总结:
● 可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系
● 可以指明多个类需要实现的方法,一般用于定义对象的扩张功能
● 主要用来定义规范。解除耦合关系
------------------------------------------------------------------------------------------------------------------
接口和抽象类之间的关系:
注意:在开发中,一个类不要去继承一个已经实现好的类,要么继承抽象类,要么实现接口
------------------------------------------------------------------------------------------------------------------