抽象类+接口
抽象类
当我们定义一个父类的时候,有些方法可能需要子类去做具体的功能,而在父类中并不能确定做哪些功能,那么我们就可以将这些方法定义成抽象方法.所谓的抽象方法就是没有方法体的方法.那么我们的类也必须定义这个类为抽象的类.
抽象类的格式
- 抽象方法和抽象类需要使用特定的修饰符进行修饰,这
个修饰符就是 abstract - 抽象类的格式为 public abstract class 类名 { }
- 抽象方法的格式为 public abstract 返回值类型 方法名(参数);
抽象类的特点
- 抽象类和抽象方法都需要被abstract修饰。抽象方法一 定要定义在抽象类中。abstract 关键字一般修饰方法和类。
- 抽象类不可以直接创建对象,原因:调用抽象方法没有意义。
- 只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类得定义成抽象类。
- 子类重写父类的抽象方法的时候要去掉abstract关键字
抽象类的注意问题
-
抽象类因为需要子类去实现,所以肯定得是一个父类
-
抽象类可以不定义抽象方法,意义在于,不让该类创建对象,方法可以让子类使用
-
一个方法如果没有方法体,则必须使用 abstract 进行修饰
-
抽象方法 是没有方法体的 一般等待他的子类去重写该抽象方法
-
声明抽象类的格式 public abstract class 类名{ }
-
声明抽象方法的格式 public abstract 返回值类型 方法名(参数);
-
抽象方法是有构造方法的,用于创建子类对象时,把抽象类中定义的成员变量和实例方法加载进子类对象内
子类继承父类 那么子类一定要重写抽象父类中的所有抽象方法,否则编译失败
抽象关键字abstract不可以和哪些关键字共存?
- private:私有的方法子类是无法继承到的,也不存在覆盖,而abstract和private一起使用修饰方法,abstract既要子类去实现这个方法,而private修饰子类根本无法得到父类这个方法。互相矛盾。
- final:最终的,最后的 。它可以修饰类 也i可以修饰变量 也可以修饰方法 如果final修饰类 代表这个类是个最终类 也就是所这个类的内容不允许发生变化 所以 final 类是没有子类的。因为被final定义的方法不能被重写,而抽象方法需要子类去重写进行实现功能,所以矛盾final修饰变量 代表这个变量变成了常量 常量是不允许二次修改的。
- static:静态的,本地的。表明该信息是属于类的。不是属于对象的,被static 修饰的物体被所有的由该类创建的对象共享。
- 如果修饰方法 代表该方法是静态方法 ,属于类的 它的调用使用类来进行调用 :类名.静态方法名();因为static不用实例化可直接调用,即当前类就直接能够调用了,而abstract需要子类实现后才能调用,所以矛盾。
- 如果一个类是抽象类,那么想要对该类进行实例化,那么必然要对该抽象类当中的所有抽象方法进行重写才能,否则编译失败。
接口
SeriaLizable:序列化
Comparable :比较器
CharSequence:字符序列
-
接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。
-
类和接口都是一种数据类型----->引用类型
-
接口中只允许出现抽象方法,不能出现非抽象方法
-
接口的源文件也是java文件,编译后的文件也是class,所以可以把接口看作一个特殊的类
- 在接口中不能定义变量,只能存放常量
- 常量前面的public static final关键字可以选着省略
- 在接口中不能存放普通成员方法,可以存放抽象方法
- 但是可以存放默认方法,就是由default修饰的方法
- 在接口中,不允许使用private
- 接口的子类(实现类)不用去重写接口中的定义的默认方法
- 对于默认方法在子类当中
-
接口的声明使用interface来创建的
- 接口也可以理解成类====>接口类
- 接口在声明出来时一般也是作为父类使用的
- 接口的子类和接口父类两者之间是一种实现关系 implement
- 类与类之间只能单继承 不能多继承
- 接口与接口当中可以单继承也可以多继承
- 为什么类与类之间只能单继承 ,而接口与接口当中可以多继承?
- 我们以后的编程要遵循“高内聚,低耦合”
6.接口中的成员变量 默认修饰符public static final
接口的意义
扩展原有类的功能
设定了规则
降低耦合性
接口和抽象类区别(面试题)!!!
- 相同点:
都位于继承的顶端,用于被其他类实现或继承;
都不能直接实例化对象;
都包含抽象方法,其子类都必须覆写这些抽象方法; - 区别:
抽象类可以定义非抽象方法,避免子类重复实现这些方法,提高代码重用性;
接口只能包含抽象方法;
一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
类与类之间只能是单继承(包括抽象类),接口与接口之间可以是多实现抽象类可以定义普通的成员变量,接口只能定public static final的成员变量