abstract抽象类
Posted 超霸霸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了abstract抽象类相关的知识,希望对你有一定的参考价值。
一、抽象类
- abstract修饰符可以用来修饰方法和类,如果修饰方法,那么该方法为抽象方法;如果修饰类,则该类为抽象类
- 抽象类中可以没有修饰方法,但抽象方法必须在抽象类中
- 抽象类,不能使用new关键字来创建对象,它是用来让子类继承的
- 抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的
- 子类继承抽象类,那么必须要实现抽象类的所有抽象方法,否则该子类也要声明为抽象类
二、实例演练
- 定义一个抽象类
- 抽象方法只有方法名,没有方法体,否则报错
//抽象类
public abstract class Action {
//普通方法
public void run(){
System.out.println("run");
}
//抽象方法
//abstract,抽象方法,只有方法名,没有方法的实现
public abstract void fly();
public abstract void eat();
public static void main(String[] args) {
//Action action=new Action(){} 报错,必须重写所有的抽象方法
Action action=new Action()
{
//实现抽象类中的所有抽象方法
@Override
public void fly() {
System.out.println("fly");
}
@Override
public void eat() {
}
};
action.fly();
action.run();
}
}
运行结果为:
fly
run
- 定义一个非抽象类子类继承抽象类
- 开始时报错,因为还为重写Action所有的抽象方法:
- 当重写了Action所有的抽象方法后正确运行(Alt + Insert -> override 快捷方式重写):
//抽象类的所有方法,继承了它的子类都必须要实现它的所有抽象方法,除非子类也是抽象类
public class B extends Action{
//必须重新所有的抽象方法,否则报错
@Override
public void fly() {
}
@Override
public void eat() {
}
}
- 定义一个抽象类子类
- 开始时并未报错,因为子类C也是抽象类,所以需要在子类的子类中重写父类的所有重写方法
public abstract class C extends Action{
Action action=new Action() {
@Override
public void fly() {
}
@Override
public void eat() {
}
}
}
- 重写类存在构造器
public abstract class Action {
//构造器
public Action() {
}
}
三、总结
抽象类的特点:
- 不能new这个抽象类,只能靠子类去实现它:约束
- 抽象类中可以写普通方法
- 抽象方法必须在抽象类中
- 子类继承抽象类,那么必须要实现抽象类的所有抽象方法
以上是关于abstract抽象类的主要内容,如果未能解决你的问题,请参考以下文章