抽象类的概念和作⽤
⼀、抽象类的概念和作⽤
1.抽象的定义
抽象是把多个事物的共性的内容抽取出来,本质就是把我们关注的内容抽取出来。(⽐如:宝马、奔驰都属于汽车,汽车是抽象出来的概念)
2.抽象类
Java中可以定义没有⽅法体的⽅法,该⽅法由其⼦类来具体的实现。该没有⽅法体的⽅法我们称之为抽象⽅法,含有抽象⽅法的类我们称之为抽象类。
3.抽象⽅法的特点
(1)只有⽅法头没有⽅法体的⽅法称之为抽象⽅法。(即只有⽅法的声明,没有⽅法的实现)
(2)抽象⽅法⽤abstract关键字来修饰。
(3)抽象⽅法代表⼀种不确定的操作或⾏为。(由⼦类去具体实现)
(4)抽象⽅法不能被调⽤。
4.抽象类的特点
(1)定义中含有抽象⽅法的类叫做抽象类。
(2)抽象类⽤abstract关键字来修饰。
(3)抽象类代表⼀种抽象的对象类型。
(4)抽象类不能实例化。
(5)抽象类中可以有具体⽅法,可以没有抽象⽅法。(也就是说⼀个类中只要有⼀个⽅法是抽象⽅法那么这个类⼀定是抽象类,反过来,⼀个抽象类中可以没有抽象⽅法,可以带有具体
实现的⽅法)
(6)⼀旦⼀个类中有抽象⽅法,那么这个类必须也要⽤abstract来修饰,代表这个类是抽象类,它是不能被实例化的。
如:
① A是⼀个抽象类
public abstract class A{
public void methodA(){
System.out.println("test");
}
}
② public abstract void methodB();
⽤abstract来修饰的⽅法称之为抽象⽅法,抽象⽅法的特点就是只有⽅法的声明,没有⽅法的实现。这⾥不能这样写:public abstract void methodB(){},因为写了⼤括号就代表有
⽅法的实现,只不过这是⼀个空实现,即没有⼤括号的才称为⽅法的声明。
public abstract class Employee {
private int number;
private String name;
private double salary;
public Employee(int number, String name, double salary) {
this.number = number;
this.name = name;
this.salary = salary;
}
// 抽象⽅法的声明(抽象类中不推荐放具体实现的⽅法)
public abstract void work();
}
// ⼀旦⼀个类继承了抽象类,那么这个类要么实现抽象类中的抽象⽅法,要么继续抽象下去。
public class JavaTeacher extends Employee {
public JavaTeacher(int number, String name, double salary) {
super(number, name, salary);
}
@Override
public void work() {
System.out.println("上java课");
}
}
public class Leader extends Employee {
private double allowance;
public Leader(int number, String name, double salary, double allowance) {
super(number, name, salary);
this.allowance = allowance;
}
@Override
public void work() {
System.out.println("培训新员⼯");
System.out.println("设计课程体系");
}
}
public class EmployeeDemo {
public static void main(String[] args) {
JavaTeacher javaTeacher = new JavaTeacher(1001, "张三", 10000);
// ⽗类的引⽤变量可以引⽤其⼦类对象(这⾥抽象类Employee也是⼀个⽗类,通过⽗类的引⽤变量引⽤值实现多态),所以也可以这么写:
// Employee javaTeacher = new JavaTeacher(1001, "张三", 10000);下同。
javaTeacher.work();
Leader leader = new Leader(101, "李四", 20000, 50000);
leader.work();
// 抽象类不能实例化
// Employee employee = new Employee(1,"⼩王",2000,50000);
}
}
备注:抽象类为什么不能实例化?
⾸先不能是⼀个java的规范。
抽象类中是可以包含抽象⽅法,不是必须。如果⼀个抽象类没有⼀个,那么他和⼀个普通java类就没有任何区别了,也就是说,在这种情况下没有abstract修饰都是⼀样的。了⼀个包含抽象⽅法的抽象类,其⼦类在继承⾃该抽象类的时候,⼦类就必须实现⽗类的所有抽象⽅法。之所以在java中存在这样⼀个语法规范,就是为了定义这种结构来解决这样的⼀些实际问题。
你看过周星驰的电影没,就是那个去⽔果店,揪住⽼板说要⼀⽄⽔果!⽼板问他你要什么⽔果,他说他就要⽔果!这个⽔果就是抽象类,你如果能在⽔果店买到⼀⽄叫⽔果的⽔果,那就能实例化⼀个抽象类。要跟现实⽣活联系起来。
5.模板⽅法模式
(1)定义:⼀个模板⽅法⽤⼀些抽象的操作定义⼀个算法,⽽⼦类将重定义这些操作以提供具体⾏为。
(2)意图:定义了在⼀个操作中的⼀个算法框架,把⼀些步骤推迟到⼦类去实现。模板⽅法模式让⼦类不需要改变算法结构⽽重新定义特定的算法步骤。
public class TemplateDemo {
public static void main(String[] args) {
DBTeacher dbTeacher = new DBTeacher();
dbTeacher.work();
System.out.println("===========我是⼀道闪电=========");
CTeacher cTeacher = new CTeacher();
cTeacher.work();
}
}
abstract class Teacher{
// ⽼师⼯作的⽅法是⼀个流程,也可以认为是⼀个模板⽅法(即模板⽅法中的每⼀个步骤是固定的,⽼师授课按这个模板⽅法执⾏就可以了)
public void prepared() {
System.out.println("准备好⽩板笔");
System.out.println("打开投影仪");
}
public void end() {
System.out.println("关闭投影仪");
System.out.println("锁教室门");
}
/**
* 这是⼀个抽象⽅法由其⼦类去实现
*/
public abstract void teaching();
public void work() {
// 授课前准备
prepared();
// 进⾏授课
teaching();
// 授课结束
end();
}
}
class DBTeacher extends Teacher{
java类的概念/
/ 实现⽗类抽象的⽅法
@Override
public void teaching() {
System.out.println("打开Oracle软件");
System.out.println("书写sql指令");
System.out.println("优化sql指令");
}
}
class CTeacher extends Teacher {
// 实现⽗类的抽象⽅法
@Override
public void teaching() {
System.out.println("打开VM软件");        System.out.println("书写C指令");        System.out.println("调试C程序");    }
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。