这是我参与更文挑战的第4天,活动详情查看: 更文挑战
抽象类
学习抽象类之前,我们要知道为什么要学抽象类,抽象类用来干什么?带着这两个问题来迎接我们接下来的学习。
第一个问题:我们为什么要学抽象类?
当我们定义类的时候,往往会给这些类写一些方法,这些方法用来描述该类的行为。
假如我们要求不同形状的面积,我们可以定义一个Shape类,但不同的Shape子类计
算面积的方法是不一样的,我们的Shape类并不知道怎么计算每一个不同形状的图形
面积,这时我们就可以使用抽象类,使抽象类中含有求面积这一通用行为,而我们通
过重写getArea()方法,就可以求不同形状的面积。
复制代码
可能到这里你还不明白,没关系,下面我们通过例子来具体分析。
在第二个问题之前我们先了解抽象类和抽象方法的一些规则。
抽象类和抽象方法的规则
- 抽象类和抽象方法必须通过abstract关键字修饰,并且抽象方法不能声明方法体。
public abstract class Test {
public Test(){
}
//抽象方法不能含有方法体
public abstract void showAll(){
//error
}
public abstract void Print();
}
复制代码
- 抽象类中可以不包含抽象方法,也可以包含抽象方法,但含有抽象方法的类一定是抽象类。
public abstract class Test {
public Test(){
}
//抽象类中可以有非抽象方法,也可以含有抽象方法
public void speak (String s){
System.out.println(s);
}
public abstract void Print();
}
public class Test {
public Test(){
}
//非抽象类,不能含有抽象方法
public abstract void Print();//error
}
复制代码
- 抽象类不能被实例化,即不能使用new关键字来调用构造器创建对象。但是抽象类中可以含有构造器,其构造器主要是用于其子类调用。
接下来是我们的第二个问题,抽象类用来干什么呢?
抽象类不能创建实例,只能被当成父类来继承,而使用抽象类,可以发挥多态的优势,使程序更加
灵活。其实抽象类是一种更高级的抽象,它从一些具有相同特征的子类中抽象出来,作为子类的通用
模板。
抽象类体现的就是一种模板设计,这也是设计模式的一中。(如果想要了解设计模式,建议大家去b站
找视频来学习,对我们的工作还是很有用的。)
复制代码
需要注意的是抽象类是abstract关键字修饰的,表明这个类只能被继承,而抽象方法同样需要abstract来修饰,表明这个方法只能被子类重写,而final修饰的类不能被继承,被final修饰的方法不能被重写,因此永远不能同时使用abstract和final。
以上就是我对抽象类的一些浅解,如有不对或遗漏之处,欢迎大家留言指正。
下期我们来讲和抽象类有关的接口。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END