• 《JAVA学习笔记(14-10---14-11抽象类)》


    【14-10】面向对象-抽象类的产生
    /*
    描述狗,行为,吼叫。
    描述狼,行为,吼叫。
    发现他们之间有共性,可以进行向上抽取。
    当然是抽取他们的所属共性类型,犬科。
    犬科这类事物,都具备吼叫行为,但是具体怎么叫,是不确定的,是由具体子类来明确的。
    这时在描述犬科时,发现了有些功能不具体,这些不具体的功能,需要在类中标识出来,通过Java关键字abstract(抽象).
    
    
    定义了抽象函数的类也必须被abstract关键字修饰,被abstract关键字修饰的类是抽象类
    */
    
    
    /*
    抽象类的特点。
    1,抽象类和抽象方法都需要被abstract修饰。
    抽象方法一定要定义在抽象类中。
    2,抽象类不可以创建实例,原因,调用抽象方法没有意义。
    3,只有覆盖了抽象类中所有的抽象方法后,其子类才可以实例化。
    否则该子类还是一个抽象类。
    
    之所以继承,更多是在于思想,是面对共性类型操作会更简单。
    */
    
    
    /*
    细节问题:
    1,抽象类是父类吗?
        是的,因为是不断抽取而来的。
    
    2,抽象类是否有构造函数呢?
        有,虽然不能给自己的对象初始化,但是可以给自己的子类对象初始化。
        抽象类和一般类的异同点:
            相同:
            1,它们都是用来描述事物,
            2,它们之中都可以定义属性和行为。
    
            不同:
            1,一般类可以具体的描述事物。
               抽象类描述事物的信息不具体。
            2,抽象类中可以多定义一个成员,抽象函数。
            3,一般类可以创建对象,抽象类不能创建对象。
    
    3,抽象类中是否可以不定义抽象方法。
         是可以的,那这个抽象类存在到底有什么意义呢?仅仅是不让该类创建对象。
    
    4,抽象关键字abstract不可以和哪些关键字共存?
        1,final (被final修饰的类不能有子类,而抽象类的定义就是为了子类继承它)
        2,private(子类要继承抽象类的全部方法才可以创建对象,一旦被private了 子类就不知道了)
        3,static (有了静态修饰的方法后,就可以被类名直接调用,而调用抽象类的抽象方法是没有用的)
    */
    
    abstract class Q
    {
        public abstract void houjiao();
    }
    
    class Dog extends Q
    {
        public void houjiao()
        {
            System.out.println("汪汪汪汪");
        }
    }
    
    class Wolf extends Q
    {
        public void houjiao()
        {
            System.out.println("嗷嗷嗷嗷");
        }
    }
    
    class Test 
    {
        public static void main(String[] args) 
        {
            Wolf wolf = new Wolf();
            wolf.houjiao();
        }
    }
    
    
    【14-11】面向对象-抽象类的练习
    
        *
    需求:公司中程序员有姓名,工号,薪水,工作内容。
    项目经理除了有姓名,工号,薪水,工作内容,还有奖金。
    对给出需求进行数据建模。
    
    在问题领域中先找寻其中的对象。
    程序员:
        属性:姓名,工号,薪水
        行为:工作
    
    项目经理:
        属性:姓名,工号,薪水,奖金
        行为:工作
    
    经过分析发现:程序员和经理都属于员工
        员工:
            属性:姓名,工号,薪水
            行为:工作
    但是员工的工作本身具有不具体性,应该是抽象,由具体的子类来体现
    
    */
    
    abstract class Employee
    {
        private String name;
        private String id;
        private double pay;
    
        public Employee(String name,String id,double pay)
        {
            this.name = name;
            this.id = id;
            this.pay = pay;
        }
    
        public abstract void work();
    
    }
    
    //程序员
    class Programmer extends Employee
    {
        public Programmer(String name,String id,double pay)
        {
            super(name,id,pay);
        }
    
        public void work()
        {
            System.out.println("code...");
        }
    }
    
    //项目经理
    class Manager extends Employee
    {
        private double bouns;
        public Manager(String name,String id,double pay,double bouns)
        {
            super(name,id,pay);
            this.bouns = bouns;
        }
    
        public void work()
        {
            System.out.println("manage");
        }
    }
    
    class AbstractTest
    {
        public static void main(String[] agrs)
        {
            System.out.println("");
        }
    }
  • 相关阅读:
    算法导论9.33
    第6章 堆排序
    算法导论9.36算法导论9.36 .
    算法导论83排序不同长度的数据项
    算法导论76对区间的模糊排序
    第8章 线性时间排序
    在bochs上运行的第一个操作系统
    算法导论6.58堆排序K路合并
    js中的preventDefault与stopPropagation详解(转)
    JS基础RegExp
  • 原文地址:https://www.cnblogs.com/sun-/p/5208788.html
Copyright © 2020-2023  润新知