JAVA面向对象基础--抽象类
一、抽象类
abstract修饰符可以用来修饰方法也可以修饰类;
-
修饰方法称为抽象方法
-
修饰类称为抽象类
注意:抽象类可以没有抽象方法,但抽象方法必须在抽象类中
举例
//抽象类,abstract:抽象
//父类
public abstract class Action {
//抽象方法:可以不用写具体的实现方法,写一个方法名即可
//抽象方法必须在抽象类中
public abstract void test();
}
//extends:单继承(接口可以多继承)
//子类
public class A extends Action {
//Action类中存在抽象方法,A类必须重写父类的方法 或者 把A类也设置为抽象的
//重写父类方法(实现)
@Override
public void test() {
}
}
小结
- 抽象类不能使用new关键字来创建对象,只能靠子类继承的去实现它
- 抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的
- 抽象的父类中有抽象方法那么子类必须重写父类的方法或者将子类也设置为抽象类
(继承了抽象类中的方法的子类,必须要实现父类的方法(即重写),除非子类也是抽象类,就需要由子类的子类去实现)
- 抽象类中可以写普通的方法(即非抽象方法)
- 抽象方法必须在抽象类中
- 抽象类即抽象的抽象:约束
思考
- 抽象类存在构造器吗
- 抽象类存在的意义?提高开发效率
二、接口
接口就是规范,定义一组规则,比如“如果你是...则必须能...”的思想
接口的关键字:interface
接口的本质是契约:即指定好后必须遵守
接口是OOP(面向对象)的精髓,是对抽象的抽象
- 普通类:只有具体实现
- 抽象类:具体实现和规范(抽象方法)都有
- 接口:只有规范!是专业的约束,自己无法写方法
- 约束和实现分离:面向接口编程
举例
//interface:接口
//接口
public interface UserService {
//方法:接口中的方法默认为public abstract的方法
//public abstract void add();
void add();
void delete();
//常量:接口中的常量默认为public static final
int num = 10;
//public static final int num = 10;
}
//接口
public interface TimerService {
void timer();
}
//类可以实现接口,关键词:implements(实现)
//格式:implements 接口名
//接口可多继承
//实现类
//实现了接口的类,就必须重写接口中的方法
public class ServiceImpl implements UserService ,TimerService{
//重写方法
@Override
public void add() {
}
@Override
public void delete() {
}
@Override
public void timer() {
}
}
注意:当没有重写方法时,会报错,如下图:
鼠标放在报错位置,按住Alt+Enter(回车键),选择Implement methods
选择需要重写的方法点击OK即可
小结
- 作用:
- 约束
- 定义一些方法,让不同的人实现
- 方法默认类型:public abstract
- 常量默认类型:public static final
- 接口不能被实例化
- 原因;接口中没有构造方法
- implements可以实现多个接口
- 在用于实现接口的类中,必须重写接口中的方法