抽象类和抽象方法:
抽象类和抽象方法的概念:*当一个类的方法被abstract关键字修饰时,那么这个方法成为抽象方法。抽象方法存在的类必须定义为抽象类;抽象类不能被实例化。*
- 语法:
public abstract class 类名称{ 修饰符 abstract 返回值类型 方法名(); 修饰符 返回值类型 方法名(){ 方法体 } }
- 要点:
**抽象类不能被实例化,可以没有,有一个或者多个抽象方法。 抽象方法有声明无实现,有抽象方法的类必须声明为抽象类。 子类必须重写所有的抽象方法才能被实例化,否则还是一个抽象类。 如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类。 没有抽象构造方法,也没有抽象静态方法。 抽象类中可以有非抽象的构造方法,创建子类的时可能调用。**
- 接口
-
接口的定义:
接口是一种标准和规范,他可以约束类的行为,是一些方法特征的集合,但是没有方法的实现。
-
接口的好处:
有利于代码的复用、代码的扩展和维护。
-
接口语法
public interface 接口名 extends 父接口1,父接口2{}
public class 类名 extends 父类名 implements 接口1,接口2{}
-
接口的注意事项:
**接口中的方法默认都是public abstract的抽象方法。
接口没有构造方法,不能被实例化。
一个接口可以继承多个就扣,但是不能继承类。
接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。
类只能继承一个父类,但可以通过implements实现多个接口。
一个类必须实现接口的全部方法,否则必须定义为抽象类。
若一个类在继承父类的同时又实现了多个接口,extends必须位于implements前。**
-
接口和抽象类的区别
相同点:
1、都代表系统的抽象层。
2、都不能被实例化。
3、都能包含抽象方法。
4、用于描述系统提供的服务,不必提供具体实现。
不同点:
1、抽象类可以为部分方法提供默认实现,接口中只能包含抽象方法。
2、抽象类便于复用,接口便于代码维护。
3、一个类只能继承一个直接父类,但能实现多个接口
-
接口的优势
接口表示一种能力,一个类实现了某个接口,就表示这个类具备了某种能力,一个类可以实现多个接口。
接口弥补了JAVA只能单继承的缺点,还有利于代码的扩展和维护。
接口类似于一个组件,需要时可以自由组装。
从使用者的角度来讲,接口和抽象类的区别在于:抽象类利于代码复用,接口利于代码维护。
接口可以降低代码的耦合性,提高代码的可扩展性和可维护性。
设计良好的接口就像日常使用的万能插座,不论插头如何变化,都能使用。
-
面向对象设计原则
1、摘取代码中变化的行为,形成接口。
2、多用组合,少用继承。
3、针对接口编程,不依赖与具体实现。
4、针对扩展开放,针对改变关闭。
-
总结
接口和抽象类的区别:
1、抽象类只能被继承,而且只能被单继承。
接口可以被实现,而且可以多实现。
2、抽象类中可以定义非抽象方法,子类可以直接继承使用。
接口中都有抽象方法,需要子类去实现。
3、抽象类使用的是 is a 关系。
接口使用的是 like a 关系。
4、抽象类的成员修饰符可以自定义。
接口中的成员修饰符是固定的,全都是public的。