抽象:将多个事物的共同特征,本质抽取出来。
抽象类与普通类的区别:
1、抽象类不能被实例化。但可以创建一个引用变量,其类型是一个抽象类,指向非抽象的子类实例。
2、普通类可以被实例化。
抽象方法与普通方法的区别:有无方法体。
抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类。
如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类。
没有抽象构造方法,也没有抽象静态方法。
抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用。
抽象类不能被实例化(不能创建对象)。
抽象方法必须被实现(最常用的时子类重写)。
抽象类的存在就是为了做父类用的,必须被继承才有意义(继承提高重用性)。
抽象方法的存在就是为了被重写,主要是为了实现多态用的。
接口:
为了解决多个功能不能继承到一个类中。(比如防盗门可以继承门的同时又能继承锁吗?答案显然是不能的,所以引入了接口这一新的定义)。
重要的是规定了相同的标准(甚至可以没有方法只有一个名称)。
注意:接口没有构造方法,不可以被实例化。
实现类必须实现接口的所有方法(方法都必须被重写为实例方法,除非实现类是抽象类)。
实现类可以实现多个接口(用implements 多个接口用,号隔开)。
接口的关键字为interface,定义一个接口的形式为:public interface Play{方法}。
接口中的变量都是静态常量(public static final)。
接口中的普通方法都是抽象方法(public abstract)。
一个实现类最多只能有一个父类,但可以实现多个接口。
一个接口不能实现另一个接口,但可以继承多个其他接口。
抽象类和接口的相同点与不同点:
相同点:
都代表系统的抽象层。
都不能被实例化。
都能包含抽象方法。
不同点:
在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法(抽象类便于复用,接口便于代码维护)
使用原则:
接口做系统与外界交互的窗口(接口提供服务)
接口本身一旦制定,就不允许随意修改。
抽象类可以完成部分功能实现,还有部分功能可作为系统的扩展点。
面向对象设计原则:
多用组合,少用继承。
针对接口编程。
针对扩展开放,针对改变关闭。