Java面向对象之抽象类abstract 入门实例

Posted 竹小冉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java面向对象之抽象类abstract 入门实例相关的知识,希望对你有一定的参考价值。

一、基础概念

  抽象事物,是若没有具体的信息可以描述这个事物,这个事物可以称为抽象事物。

  抽象类,是不断的向上抽取而来。抽取方法声明而不确定具体的方法内容。由不同的子类来完成具体的方法内容。

  (一)抽象类的特点:

    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 }

三、代码执行

  

 

以上是关于Java面向对象之抽象类abstract 入门实例的主要内容,如果未能解决你的问题,请参考以下文章

Java 设计模式 Day1 之面向抽象原则:抽象(abstract)类的设计与应用分析

Java面向对象之接口

Java面向对象之抽象与接口

Java 面向对象编程 抽象类 抽象方法 abstract

JAVA——面向对象——抽象类和抽象方法abstract

Java面向对象 抽象类与抽象方法的使用(关键字abstract)