美文网首页
java笔记--抽象类

java笔记--抽象类

作者: 吃饱喝足搬代码丶 | 来源:发表于2018-04-03 22:38 被阅读0次

    特点:

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

    几个问题:

    1 抽象类中有构造函数吗?
    有,用于给子类对象初始化。

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

      abstract  class Demo{
         void show1()
         {}
         void show2()
         {}
         }
    

    3 抽象关键字不可以和哪些关键字共存?
    private static final

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

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

    实例:

    /*
     雇员实例:
     需求:公司中程序员有姓名,工号,薪水,工作内容。
     项目经理除了有姓名,工号,薪水,还有奖金,工作内容。
     对给出需求进行数据建模。
     
     
    分析:
    在这个问题领域中,先找出涉及的对象。
    通过名词提炼法。
    程序员:
          属性:姓名,工号,薪水
          行为:工作
    经理:
            属性:姓名,工号,薪水,奖金
             行为:工作
             
    程序员和经理不存在着直接继承关系
    
    但是程序员和经理具有共性内容。
    可以进行抽取。因为他们都是公司的雇员
    
    可以将程序员和经理进行抽取,建立体系
    */
    //描述雇员
    abstract class Employee{
        private String name;
        private String id;
        private double pay;
        Employee(String name,String id,double pay){
            this.name=name;
            this.id=id;
            this.pay=pay;
        }
        public abstract void work();
    }
    
    //描述程序员
    class Programmer extends Employee{
        Programmer(String name,String id,double pay){
            super(name,id,pay);
        }
          public void work(){
              System.out.print("code");
        }
    }
    //描述经理
    class Manager extends Employee{
        private int bonus;
        Manager(String name,String id,double pay,int bonus){
            super(name,id,pay);
            this.bonus=bonus;
        }
          public void work(){
              System.out.print("manage");
        }
    }
    

    调用:

    public class as{
    
         public static void main(String[] args) {
             Employee a = new Programmer("Manage","3",34);//向上转型
             a.work();//被子类所覆写的过的方法
         }
     }
    
    运行: image.png

    相关文章

      网友评论

          本文标题:java笔记--抽象类

          本文链接:https://www.haomeiwen.com/subject/chthhftx.html