一、抽象类和抽象方法
1.java中当一个类的方法被abstract关键字修饰时,这个方法就是抽象方法。
2.抽象方法所在的类必须定义为抽象类。
注意:区别抽象类和普通类
区别 | 普通类 | 抽象类 |
关键字 | 不需要abstract修饰 | 需要用abstract关键字修饰 |
方法体 | 有方法体 | 没有方法体 |
实例化 | 可以实例化 | 不能实例化 |
成员 | 可以包含属性,普通方法方法 | 可以包含抽象方法,还有一切普通类中的成员 |
注意:抽象类的子类也可以是抽象类,此时,父类中的抽象方法可以在子类中不被实现(重写)。
二、接口
1.接口理解:java中的接口,是一种约定,也是一种能力,它是系统对外提供的所有服务。
2.定义接口
public interface 接口名{ //关键字interface定义接口
//接口成员,可以是方法,也可以是常量
}
注意:接口中的方法默认的都是公共的,抽象方法,且修饰符只能是public,可选可不选(不写默认是public)
没有方法体,接口也不能实例化!接口中定义的变量都叫做静态常量,必须赋默认初始值!
3.实现接口
public 类名 implements 接口名{ //实现接口关键字
//实现的方法
}
注意:实现类必须实现接口中所有的抽象方法,除非这个类也是抽象类,接口中的实现类允许包含普通方法。
4.接口的应用
-
接口本身可以继承接口,注意是继承extends接口,不能是实现implements接口!
- 实现多个接口代码如下:
public calss 类名 extends 父类名 implements 接口1,接口2....{
//类的成员
}
注意:java中一个类只能直接继承一个父类,但是可以实现多个接口(实现多个接口相当于java的多继承)
5.接口特性
-
接口中的变量都是静态常量(public static final..... )
-
接口不能被实例化,但是可以作为类型使用
-
实现类必须实现接口中的所有方法,除非实现类也是抽象类!
-
实现类可以实现多个接口,implements 使用,逗号隔开。
-
使用接口好处是便于代码维护,扩展性好.
三、面向对象设计的原则
在实际开发中,应当遵循以下原则:
1.摘取代码中变化的行为,形成接口(也就是抽象方法)
2.多用组合,少用继承
3.针对接口编程,不依赖于集体实现。
4.针对扩展开放,针对改变关闭。