美文网首页
2019-03-05 abstract

2019-03-05 abstract

作者: yangsunior | 来源:发表于2019-03-05 19:14 被阅读0次

    Java abstract

    • abstract 可以被哪些关键字修饰?
      1. private ×
      2. static ×
      3. final ×
      4. public √
    • 抽象类是父类吗?
      答:是的。抽象类需要子类覆盖其中所有的抽象方法之后才能对子类实例化。
    • 简述抽象类与一般类的相同点。
      答:都是用来描述事物,都在内部定义成员。
    • 简述抽象类与一般类的不同点。
      1. 一般类有足够信息描述事物,抽象类描述的信息可能不足。
      2. 一般类不能定义抽象方法,只能定义非抽象方法。
        抽象类既能定义抽象方法,又能定义非抽象方法。
      3. 一般类可以被实例化,抽象类不能被实例化。

    抽象方法

    1. 抽象方法只有声明,没有实现,被abstract修饰。
    2. 抽象方法必须定义在抽象类中,类也被abstract修饰。
    3. 构造方法、类方法(static修饰)不能被声明为抽象方法。

    抽象类

    1. 抽象类不可以被实例化。(调用抽象方法没有意义

    2. 抽象类的子类可以被实例化。(子类为非抽象子类时,可实例化
      非抽象子类满足的充分条件: 完全覆盖父类中的抽象方法

    public abstract class Animal {
        abstract void eat();
        abstract void breath();
    }
    
    public class Cat extends Animal {
        @Override
        void eat() {
            System.out.println("I like fish.");
        }
    
        @Override
        void breath() {}
        
        void run() {
            System.out.println("i can run.");
        }
    }
    
    public abstract class Dog extends Animal {
        void eat() {
            System.out.println("I like bone.");
        }
    }
    
    public class Hound extends Dog {
        @Override
        void breath() {
            System.out.println("Hound like fresh air.");
        }
    }
    
    public class Test {
        public static void main(String args[]) {
            (new Cat()).eat();
            (new Hound()).eat();
            (new Hound()).breath();
        }
    }
    

    抽象类继承图表

    abstract.jpg

    抽象类建模实例分析

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

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

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

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

    程序员和经理不存在着直接继承关系,但是程序员和经理却具有共性内容。可以进行抽取。因为他们都是公司的雇员,可以将程序员和经理进行抽取.建立体系.


    //描述雇员。
    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.println("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.println("manage");
          }
    }
    

    相关文章

      网友评论

          本文标题:2019-03-05 abstract

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