抽象类 abstract
必须使用关键字abstract修饰
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象
抽象类存在的意义
1.因为抽象类不能实例化对象,所以必须要有子类来实现它之后才能使用。这样就可以把一些具有相同属性和方法的组件进行抽象,这样更有利于代码和程序的维护。
比如本科和研究生可以抽象成学生,他们有相同的属性和方法。这样当你对其中某个类进行修改时会受到父类的限制,这样就会提醒开发人员有些东西不能进行随意修改,这样可以对比较重要的东西进行统一的限制,也算是一种保护,对维护会有很大的帮助。
2.当又有一个具有相似的组件产生时,只需要实现该抽象类就可以获得该抽象类的那些属性和方法。
比如学校又新产生了专科生这类学生,那么专科生直接继承学生,然后对自己特有的属性和方法进行补充即可。这样对于代码的重用也是很好的体现。
- 抽象类自身不能创建对象,但是它的子类可以创建对象
- 抽象方法没有方法体(即没有“{}”)
- 抽象方法必须定义在抽象类中
- 在父类中定义的抽象方法,在子类中必须实现(即方法重写)
public abstract void studyC();
- 抽象类中的构造方法
由于抽象类里会存在一些属性,那么抽象类中一定存在构造方法,其存在目的是为了属性的初始化。
并且子类对象实例化的时候,依然满足先执行父类构造,再执行子类构造的顺序
小训练(抽象类与继承-长方形的面积与周长)
package demo;
public class Test {
public static void main(String[] args){
//new一个对象 进行赋值
Way w = new Way(20,30);
//进行调用
w.perimeter();
w.area();
}
}
abstract class Rectangle{
//定义长度和宽度
int length;
int wide;
//有参构造方法进行赋值
public Rectangle(int length,int wide){
this.length = length;
this.wide = wide;
}
//周长抽象类
public abstract void perimeter();
//面积抽象类
public abstract void area();
}
//继承
class Way extends Rectangle{
//继承父类的参数
public Way(int length,int wide){
super(length,wide);
}
//实现抽象类中的方法
public void perimeter(){
int perimeter = (length+wide)*2;
System.out.println("perimeter:"+perimeter);
}
public void area(){
int area = length*wide;
System.out.println("area:"+area);
}
}
PS.
- 今天学习的抽象类不是特别抽象,接口也很好懂,但是在写一个比较大型的demo中比较吃力,没有思路,只能机械的跟随着敲,最后只是将代码敲了一遍过了过手。但我发现在每堂课对应的知识点去寻找一些比较小的有针对性的demo进行练手后对知识的理解有显著性上升,并且可以慢慢的将一个比较小的demo逐渐一步步的进行扩展,也让我有了学习的动力,来日可期
- 今日上课demo能懂得其大部分意思后再单独发出
网友评论