一、基础概念
抽象事物,是若没有具体的信息可以描述这个事物,这个事物可以称为抽象事物。
抽象类,是不断的向上抽取而来。抽取方法声明而不确定具体的方法内容。由不同的子类来完成具体的方法内容。
(一)抽象类的特点:
1、抽象方法没有方法体,必须由抽象关键字abstract来修饰。
1、抽象方法一定是存在于抽象类中,必须有抽象关键字abstract来修饰。
2、抽象类不能实例化。不能用new关键字创建对象。
3、子类必须覆盖抽象类中的所有抽象方法后,才可以实例化。否则该子类还是一个抽象类。
(二)抽象类中可以有构造函数:
因为抽象类不能创建对象,所有抽象类中的构造函数是不能给抽象类的对象进行实例化。但是抽象类可以有子类,抽象类的构造函数可以子类的对象进行初始化。所有抽象类中可以有构造函数。
(三)抽象类和一般类的区别:
抽象类可以描述事物的属性和行为。描述事物的信息不具体,可以定义抽象方法,但不能进行实例化。
一般类可以描述事物的属性和行为。事物的信息是具体的,不可以定义抽象方法,但可以进行实例化。
(四)抽象类一定是个父类:
因为必须需要子类覆盖抽象方法后,才可以实例化。才能使用这些方法。
(五)抽象类中是可以不定义抽象方法的:
这时的抽象类的功能,仅仅是让该类不能创建对象。
(六)抽象关键字abstract和那些关键字不能共存的:
关键字final、关键字private、关键字static。
二、实例代码
要求:公司中有程序员和项目经理。程序员有姓名、工号和薪水。并为公司进行工作。项目经理除了有姓名、工号和薪水外还有奖金。也为公司进行工作。对给出的需求进行数据建模。
分析:
程序员:属性:姓名、工号、薪水
行为:工作
项目经理:属性:姓名、工号、薪水、奖金
行为:工作
两者不存在所属关系,但是有共性内容,可以向上抽取为雇员。
雇员:属性:姓名、工号、薪水
行为:工作
1 //抽象类 Employee 2 abstract class Employee 3 { 4 private String name; 5 private int id; 6 private double pay; 7 8 public void setName(String name) 9 { 10 this.name = name; 11 } 12 public void setId(int id) 13 { 14 this.id = id; 15 } 16 public void setPay(double pay) 17 { 18 this.pay = pay; 19 } 20 21 public String getName() 22 { 23 return name; 24 } 25 public int getId() 26 { 27 return id; 28 } 29 public double getPay() 30 { 31 return pay; 32 } 33 34 Employee(String name,int id,double pay) 35 { 36 this.name = name; 37 this.id = id; 38 this.pay = pay; 39 } 40 41 //抽象方法 work 42 public abstract void work(); 43 } 44 45 //描述程序员继承抽象类 Employee 46 class Programmer extends Employee 47 { 48 Programmer(String name,int id,double pay) 49 { 50 super(name,id,pay); 51 } 52 public void work() 53 { 54 System.out.println("name: "+this.getName()+" id: " +this.getId()+" pay: "+this.getPay() ); 55 System.out.println("Programmer work ......"); 56 } 57 58 } 59 60 61 //描述项目经理继承抽象类 Employee 62 class Manager extends Employee 63 64 { 65 private double bonus; 66 67 Manager(String name,int id,double pay,double bonus) 68 { 69 super(name,id,pay); 70 this.bonus = bonus; 71 } 72 public void work() 73 { 74 System.out.println("name: "+this.getName()+" id: " +this.getId()+" pay: "+this.getPay()+" bonus: " +bonus); 75 System.out.println("Manager work ......"); 76 } 77 } 78 79 class AbstractDemo 80 { 81 public static void main(String[] args) 82 { 83 Programmer a = new Programmer("xiaoming",001,5000.00); 84 a.work(); 85 Manager m = new Manager("xiaohong",010,8000.00,600.00); 86 m.work(); 87 } 88 }
三、代码执行
原文:https://www.cnblogs.com/zhuxr/p/8910360.html