抽象类
什么是抽象类和抽象方法?
抽象的,顾名思义,这不是具体的东西,只是简单的描述,这和我们的抽象类类似,抽象类的本质还是类,使用了abstract关键字定义的类就是抽象类,使用了abstract关键字定义的方法就是抽象方法,如果这个类中含有抽象方法,那么这个类必定是抽象类,抽象类被子类继承了,子类必须重写抽象类中的抽象方法,如果子类不重写这个抽象方法,那么子类也必须是抽象类。还有需要注意的地方,抽象类不能被final修饰,抽象方法也不能被final修饰,因为抽象方法需要子类实现。
抽象方法
使用abstract关键字修饰的方法,就是抽象方法,抽象方法没有方法体,含有抽象方法的类必定是抽象类。
格式:
修饰符 abstract 返回值 方法名(参数列表);
例如:
public abstract void eat();
抽象类
使用abstract关键字修饰的类,就是抽象方法。
格式:
修饰符 abstract class 类名{
}
例如:
public abstract class AbstractTest{
}
抽象类的特点
public abstract class AbstractTest {
public abstract void eat();
}
//下面这一行是报错的,我们看看报错信息
class AbstractTest1 extends AbstractTest {
}
报错截图:
在这个报错信息可以清楚的看到解决方法,要么重写AbstractTest 类中的eat方法,要么将这个类也改成抽象类,这就很好的印证了抽象类的特点。
public abstract class AbstractTest {
//这边的抽象方法中使用了final,子类无法重写该抽象方法,所有是报错的
public final abstract void eat();
}
class AbstractTest1 extends AbstractTest {
@Override
public final void eat() {
}
}
报错截图:
//类中使用了final,子类无法继承,所以要继承这个抽象方法必须将这个final删除
public final abstract class AbstractTest {
public abstract void eat();
}
class AbstractTest1 extends AbstractTest {
}
报错截图:
上面两段代码的报错的原因都是一样的,都是使用了final关键字,所以要解决报错就需要将final删除,这样印证了我们开头所说的抽象类不能被final修饰,抽象方法也不能被final修饰。
抽象类的使用
//抽象类
public abstract class AbstractTest1 {
//抽象方法
public abstract void eat();
}
//继承抽象类
public class AbstractTest2 extends AbstractTest1{
//重写抽象方法
@Override
public void eat() {
System.out.println("吃鲍鱼!");
}
}
public class AbstractTest3 {
public static void main(String[] args) {
//创建对象
AbstractTest2 at2 = new AbstractTest2();
at2.eat();
}
}
执行结果:
还有一个点需要注意的就是抽象类是不允许创建对象的
报错截图:
总结:使用了abstract关键字定义的类就是抽象类,使用了abstract关键字定义的方法就是抽象方法,如果这个类中含有抽象方法,那么这个类必定是抽象类,抽象类被子类继承了,子类必须重写抽象类中的抽象方法,如果子类不重写这个抽象方法,那么子类也必须是抽象类。还有需要注意的地方,抽象类不能被final修饰,抽象方法也不能被final修饰,因为抽象方法需要子类实现。抽象类还不能创建对象。