【从零开始学Java笔记】关键字abstract
大家可以关注作者的账号,关注从零开始学Java笔记文集。也可以根据目录前往作者的博客园博客进行学习。本片文件将基于黑马程序员就业班视频进行学习以及资料的分享,并记录笔记和自己的看法。欢迎大家一起学习和讨论。
【从零开始学Java笔记】目录
什么是抽象?
在Java中抽象概念常用于方法和类
抽象方法:如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法。抽象方法只包含一个方法名,而没有方法体。
抽象类:在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
关键字:abstract(用于修饰方法和类)
举个例子
public class AbstractTest {
public static void main(String[] args) {
Programmer p = new Programmer();
p.name = "刘备";
p.work();
Manager m = new Manager();
m.name = "张飞";
m.work();
m.bouns();
}
}
abstract class Employee{
//程序员和经理的共同属性
String name;
int id;
double pay;
//抽象类没有方法体
public abstract void work();
}
class Programmer extends Employee{
@Override
//对抽象方法的重写
public void work() {
System.out.println(name+"的工作内容是写代码");
}
}
class Manager extends Employee{
@Override
//对抽象方法的重写
public void work() {
System.out.println(name+"的工作内容是管理程序员");
}
public void bouns() {
System.out.println("获得奖金");
}
}
可以看出程序员和经理有很多共性,例如姓名等属性和办公这个方法,所有写一个父类来提高代码的复用性。但是很显然程序员和经理工作不相同,所以在父类中无法对work()
方法进行编写,所以不写方法体,再由子类对父类的抽象方法进行重写,这就是抽象。
抽象类的特点:
抽象方法只能在抽象类里面
抽象类和抽象方法必须被abstract修饰
抽象类不能创建对象(不能实例化)
抽象类中可以有非抽象的方法
抽象类和类的关系也是维承
一个类维承了抽象类要么重写所有的抽象方法,要么他自己是抽象类
抽象类的成员特点:
- 成员变量
可以有成员变量
可以有常量 - 成员方法
可以有抽象方法
可以有非抽象方法 - 构造方法
可以有构造方法的,需要对抽象类的成员变量进行初始化
抽象关键字abstract不可以和哪些关键字共存?
抽象方法,没有方法体,必须被重写才能使用,所以不能被重写的方法就没有抽象的意义。
关键字final是用来修饰类、成员变量、成员方法,修饰的类无法被继承,成员变量无法修改,成员方法无法被重写,所以abstract和final水火不容。
父类的private修饰的成员变量、成员方法也不能被子类访问,所以和abstract共存没有意义。
抽象类中是否有构造函数?
虽然抽象类不能被实例化,但是仍然有成员变量,需要被初始化,所有有构造函数。
java抽象类的构造方法和普通类的构造方法一样,都是用来初始化类,只是抽象类的构造方法不能直接调用因为抽象类不能实现实例,但是一旦一个普通类继承了抽象类也可以在构造函数中调用其抽象类的构造函数。
抽象类中可不可以没有抽象方法?
可以,如果一个方法不想被实例化,就可以使用没有抽象方法的抽象类,例如IO流中的writer和reader类。