• 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 }

    三、代码执行

      

  • 相关阅读:
    报告论文:数字图像噪音处理研究
    报告论文:汽车GPS调度系统车载终端设计技术方案
    疾病研究:我是一名34岁的进行性肌营养不良症患者
    08年最热门七大技术和最紧缺的IT人才
    C#序列化
    网络游戏的数据管理
    2008年3月Google占美国搜索请求量市场份额达67.3%
    C#反转字符串效率最高的方法
    何时应该使用极限编程
    几种字符串反转方法效率比较
  • 原文地址:https://www.cnblogs.com/zhuxr/p/8910360.html
Copyright © 2020-2023  润新知