一、抽象类
抽象方法:用abstract修饰方法
抽象类:用abstract修饰类
抽象类的价值在于,使抽象方法让子类实现
语法:
abstract 类名{
访问修饰符 abstract 返回类型 方法名();
}
使用细则:
- 抽象类不能被实例化
- 抽象类可以不包含abstract方法,一旦类包含abstract方法,则这个类必须声明为抽象类
- abstract只能修饰方法和类
- abstract方法在其类中不能被实现,只能被子类实现
- 一个类继承抽象类,那么它必须实现所有abstract方法,除非它也被声明为抽象类
- abstract方法不能使用private、final、static修饰,因为这些关键字都和重写相违背
二、接口
把一些没有被实现的方法封装到一起,当某个类要使用时,根据情况实现方法,接口满足“like-a”关系。
语法:
interface 接口名{
public static final 属性;
1.抽象方法(abstract关键字可省略):不可实现
2.默认方法(default):在接口内实现
3.静态方法(static):在接口内实现
}
class 类名 implements 接口1,接口2,...{
自己属性和方法;
实现所有抽象接口方法;
}
使用细则
- 接口不能被实例化
- 接口内的方法是public方法,抽象方法可以不用abstract修饰
- 普通类实现接口,所有的接口方法必须被实现,使用alt + enter快速实现
- 抽象类实现接口,可以不用实现所有接口方法
- 一个类可以实现多个接口
- 接口可以继承多个接口,但不能继承类
- 接口的属性是public static final的,例 int n1 = 10;等价于public static final int n1 = 10;
- 接口属性的访问形式:接口名 / 类名 / 对象名 . 属性名(类名/对象名指的是实现接口的类和即其对象)
- 接口的修饰符只能是public和默认
三、接口与继承、多态
(一)接口与继承
一个类只能继承一个父类,继承满足“is-a”关系
一个类可以实现多个接口,接口满足“like-a”关系
(二)接口与多态
- 多态参数
public class Hello {
public static void main(String[] args) {
Hello hello = new Hello();
hello.printI(new Phone());
hello.printI(new Computer());
}
//多态参数,可以接收实现这个接口的类的实例
public void printI(USB usb){}
}
interface USB{}
class Phone implements USB{}
class Computer implements USB{}
- 多态数组
USB[] usbs = new USB[2];
usbs[0] = new Phone();
usbs[1] = new Computer();
- 接口存在多态传递现象
interface IH{
void Hi();
}
interface IG extends IH{ }
//当一个接口IG继承另一个接口IH,那么类AA继承了IH的接口,即多态传递现象
class AA implements IG{
public void Hi() {}
}
特别说明
本文章是个人整理的学习笔记,参考b站韩顺平老师的课程(【零基础 快速学Java】韩顺平 零基础30天学会Java)。老师讲的非常好,有兴趣的可以去看一下。