• 抽象类


    抽象类:
    抽象:笼统,模糊,不具体。


    特点:
    1,方法*只有声明没有实现*时,该方法就是抽象方法,需要被abstract修饰。
         抽象方法必须定义在抽象类中。该类必须也被abstract修饰。
    2,抽象类不可以被实例化,因为调用抽象方法没意义。
    3,抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化。否则,这个子类还是抽象类。
     


    关于抽象类的一些问题:
    1,抽象类中有构造函数吗?
    有,用于给子类对象进行初始化。

    2,抽象类可以不定义抽象方法吗?
    可以,但是很少见,目的就是不让该类创建对象。AWT的适配器对象就是这种类。
    通常这个类中的方法有方法体,但是却没有内容。(大括号中没有内容)

    abstract class Demo
    {
    void show1()
    {}

    void show2()
    {}} 

    3,抽象关键字不可以和那些关键字共存?
    private 不行 //如果定义私有方法,抽象类的子类中的方法不能覆盖。
    static 不行   //声明static说明可以直接用类名调用该方法,声明abstract说明需要子类重写该方法,矛盾。
    final 不行

    4,抽象类和一般类的异同点。
    相同点:
    抽象类和一般类都是用来描述事物的,都在内部定了成员。
    不同:
    1.一般类有足够的信息描述事物。
        抽象类描述事物的信息有可能不足。
    2.一般类中不能定义抽象方法,只能定非抽象方法。
        抽象类中可定义抽象方法,同时也可以定义非抽象方法。
    3.一般类可以被实例化。
        抽象类不可以被实例化。

    5,抽象类一定是父类吗?
    是的。因为需要子类覆盖其方法后才可以对子类实例化。


    例:

    雇员示例:
    需求:公司中程序员有姓名,工号,薪水,工作内容。
    项目经理除了有姓名,工号,薪水,工作内容外,还有奖金。
    对给出需求进行数据建模。

    分析:
    在这个问题领域中,先找出涉及的对象。
    通过名词提炼法。


    程序员:
    属性:姓名,工号,薪水、
    行为:工作。
    经理:
    属性:姓名,工号,薪水,奖金。
    行为:工作。


    程序员和经理不存在着直接继承关系。

    但是程序员和经理却具有共性内容,可以进行抽取,因为他们都是公司的雇员。

    可以将程序员和经理进行抽取,建立体系。

    例:

     1 //描述雇员。
     2 
     3 abstract class Employee
     4 {
     5     private String name;
     6     private String id;
     7     private double pay;
     8     Employee(String name,String id,double pay)
     9     {
    10         this.name = name;
    11         this.id = id;
    12         this.pay = pay;
    13     }
    14 
    15     public abstract void work();
    16     
    17 }
    18 
    19 
    20 //描述程序员。
    21 class Programmer extends Employee
    22 {
    23     Programmer(String name,String id,double pay)
    24     {
    25         super(name,id,pay);
    26     }
    27     public void work()
    28     {
    29         System.out.println("code...");
    30     }
    31 }
    32 
    33 //描述经理。 
    34 class Manager extends Employee
    35 {
    36     private int bonus;
    37     Manager(String name,String id,double pay,int bonus)
    38     {
    39         super(name,id,pay);
    40         this.bonus = bonus;
    41     }
    42     public void work()
    43     {
    44         System.out.println("manage");
    45     }
    46 }
  • 相关阅读:
    牛客网-求和
    牛客网-删除公共字符
    牛客网-字符串中找出连续最长的数字串(好未来)
    牛客网-求数列的和(挖财)
    牛客网-树的高度(小米)
    牛客网-藏宝图(网易)
    【Python学习笔记】
    php平滑升级
    Nginx平滑升级
    linux下线刷硬盘
  • 原文地址:https://www.cnblogs.com/kkkky/p/6387448.html
Copyright © 2020-2023  润新知