四、抽象类和接口
4.1 抽象类
4.1.1 抽象类和抽象方法
使用上 abstract 关键字修饰的类 或 方法
抽象类
-
抽象类就是抽象的类,抽象往往是相对于具体而言的。
-
例如猫是具体的对象,则动物就是抽象概念
-
抽象方法所在的类,必须是抽象类才行,在class之前写上abstract即可
-
抽象类无法创建对象,抽象出的概念,不存在具体实例
-
语法 : <访问修饰符> abstract calss 类名{}
抽象方法
- 当一个类的方法被abstract 关键字修饰的时候,这个方法被称为抽象方法
- 被抽象的方法,不会具体实现,也就是不需要写方法体,同时也不需要大括号
- 被抽象的方法,抽象类的子类必须重写该方法,除非子类也是抽象类
- 语法 <访问修饰符> abstract < 返回值 > < 方法名 >([参数列表])
抽象方法与普通方法的区别
-
普通方法有方法体,而抽象方法没有
-
示例
public abstract class Test01 { //普通方法 public void print(){ //方法体 System.out.println("hello"); } //抽象方法 public abstract void println(); }
抽象类的优势‘
- 提高可重用性
- 代码松耦合,更易于维护
- 方便实现多态
有抽象方法的类必然是抽象类,但抽象类当中的方法不一定全是抽象方法
abstract只能修饰类或方法,不能修饰属性和构造方法
4.1.2 final修饰符
final除了可以修饰变量,还可以用来修饰类和方法
1. final修饰类
- 用final修饰的类不能再被继承
- **语法 : <访问修饰符> final Class 类名 **
2. final修饰类的方法
- 用final修饰的方法不能再被重写
- 语法 : <访问修饰符> final <返回值类型> 方法名 ([参数列表]) {}
4.2 接口
4.2.1 为什么需要接口
1. java中一个类不允许有多重继承,但是可以继承n个接口
2. 我们希望在一个类中能够同时兼容多个不同类型的特征,则需要使用接口
4.2.2 接口的概念和定义
1. 接口是一个全部由抽象方法组成的集合,接口内定义的方法全部为抽象方法
2. 接口需要用interface定义
3. 接口内只能有抽象方法和常量
4. 接口没有构造方法
5. 定义接口
- 定义接口类型
语法 :[访问修饰符] interface 接口名(){
//接口成员
}
-
类实现接口
语法 : class 类名 implements 接口名{
//类成员
}
-
示例
notebook 接口
public interface notebook { public void play(); }
Student 类
//实现接口 public class Student implements notebook{ @Override public void play() { System.out.println("学生在使用电脑"); } }
4.2.3 定义复杂的接口
1. 接口直接可以通过用extends 关键字实现继承关系
- 一个接口可以继承多个接口
- 接口不可以继承类
- 语法 [访问修饰符] interface 接口名 extends 父接口1,父接口2 …{}
2. 一个普通类只能继承一个类,但能同时实现多个接口
-
接口同时继承一个父类并实现多个接口
-
语法 : calss 类名 extends 父类名 implements 接口1,接口2
3. 示例
-
接口继承接口
-
父类接口1
public interface FatherInterface1 { void one(); }
-
父类接口2
public interface FatherInterface2 { void two(); }
-
子类接口
public interface Subclass extends FatherInterface1,FatherInterface2{ @Override void one(); @Override void two(); }
-