抽象类&&抽象方法
当一个类的方法被abstrac关键字修饰时,该方法就成为抽象方法
抽象方法所在的类就要被定义为抽象类。
语法:
访问修饰符 abstract 返回类型 方法名(参数列表);
public abstract class 类名{
//**//
}
普通方法 VS 抽象方法
1.抽象方法需要用abstract修饰,普通方法不需要
2.普通方法有方法体,抽象方法没有方法体
普通类 VS 抽象类
1.抽象类不能被实例化,普通类可以被实例化
2.抽象类需要使用abstract修饰,普通类不需要
注意:
1.当一个方法被定义为抽象方法时,意味着该方法则不会有具体的实现,而是在抽象类的子类中通过方法重写进行实现
2.抽象类中可以没有抽象方法,但是包含了抽象方法的类必须被定义为抽象类
3.如果子类没有实现抽象类中的抽象方法,那么子类也要被定义为抽象类
4.没有抽象构造方法,也没有抽象静态方法
5.抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用
6.抽象类中已经实现的方法可以被子类调用,使代码可以被复用,同时提供了抽象方法保证了子类具有自身的独特性。
接口
为什么要使用接口?
Java只支持单根继承(即一次只能继承一个类),使用接口可以在一定情况下减少代码的冗余。
接口是一个不能被实例化的类型
语法:
public interface 接口名{
接口成员及方法
}
接口里所有的方法都是默认的公共的抽象的方法。
注意:
实现类可以有多个接口,也必须实现接口的所有方法
接口中的变量都是静态变量 public static final
接口中不能有构造方法
接口的使用
public 类名 implements接口名,接口名2 {
实现方法
普通方法
}
接口的继承
public interface 接口名 extends 父接口1,父接口2{
xxx
}
抽象类 VS 接口
相同点
代表系统的抽象层
都不能被实例化
都能包含抽象方法(用于提供系统的服务,不必提供具体实现)
不同点
在抽象了中可以为部分方法默认实现 而接口只能包含抽象方法
一个类只能继承一个直接的父类 ,但可以继承多个接口
已经存在的继承树,可以方便的抽取接口 但是抽取抽象类不容易
接口的使用原则
接口做系统与外界交互的窗口,(接口提供服务)
接口本身一旦制定,就不允许随意修改
抽象类可以完成部分功能实现-还有部分功能可做系统扩展点
注意:
1.抽象类是单一继承,接口是多重实现
(子类只能有一个父类,但是可以有多个接口)
继承抽象类表示从属关系,实现接口的方法表示组合关系
2.接口中全是抽象方法,抽象类中可以有抽象方法,也可以有包含方法体的方法
3.接口中没有构造方法,不可继承可以被实现
抽象类中有构造方法,不可被实例化
4.类可以实现很多接口,但只能继承一个抽象类
5.方法参数尽量用接口,方法返回值尽量用接口 属性类型尽量用接口
3.一个接口也可以继承多个接口,但是不能继承类
接口还需要注意的地方:
接口中的成员变量
默认都是 public static final 必须显示初始化
接口中的方法
默认都是public abstracrt
接口中除了成员变量和方法 不能包含其他
一个接口不能实现一个接口,但是可以继承多个其他接口
一个类必须实现接口抽象方法 ,implements 除非这个类也是抽象类
接口是一种约定,有些接口只有名字---
接口中只有静态常量,没有变量
接口中没有私有方法
接口可以作为属性来创建对象。。