抽象类和接口
什么是抽象类
什么是抽象方法 ---- 和之前定义成员方法一样,只是没有方法体而已: 没有{};
权限修饰符 abstract 返回值类型 方法名(参数列表);
类名前也要加 abstract class 类名
有抽象方法的一定是抽象类
抽象类里面不一定有抽象方法
抽象类的本质:
强制子类必须做的事情 重写抽象类的所有抽象方法
在父类上按alt+enter --->重写方法
imolements methos
抽象类的特点
抽象类不能够实例化(即不能够new对象)
抽象类多态:父类指向子类(父类是抽象类)
父类 f = new 子类();
抽象类的注意事项:
抽象类不能实例化,需要具体的子类实例化
如果抽象类的子类是抽象类,那么也不能实例化,但是一定存在最具体的子类,没有的话没 有意义
抽象类的实例化时通过抽象类多态
Fu fu = new Zi();
抽象类的成员特点:
1)成员变量
可以是变量 也可以是自定义常量(被final修饰)
2)成员方法
可以是抽象方法,也可以是非抽象方法
抽象类中的抽象方法,必须携带abstract关键字,否则报错
public abstract void method();
子类尽量保持访问权限足够大,低于父类会报错
3)构造方法
接口
什么是接口
interface 接口名{
} 和类名的命名规范一样
接口的方法只能是抽象方法 不能实例化
如何实例化------接口多态---提供的接口的子实现类
interface 接口名{
}
class 子实现类名 implements 接口1,接口2...{}
如果当前子实现类是一个抽象类,那么一定存在一个具体的子类
接口的子实现类和接口的关系
继承一个类的同时可以实现多个接口
谁实现接口 new 谁
接口中的成员特点 实际开发中,接口的子实现类名: 接口名+Impl;
成员变量只能是常量,存在默认修饰符public static final 可以省略
接口中没有构造方法,只是提供一些抽象方法让子类实现
接口中的成员方法 GDK8以后可以使用默认方法(default 有方法体的)
也可以提供静态方法 静态必须有方法体 使用
只能是抽象方法 存在 默认修饰符public static final
关系的区别
类与类 继承关系 extends 只支持单继承,不支持多继承,但是可以多层继承
类与接口 实现关系 一个类继承自另一个类的同时,可以实现多个接口
格式 class 子实现类名 implements 接口1,接口2...{}
接口与接口 继承关系 可以多继承