zoukankan      html  css  js  c++  java
  • 《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("");
        }
    }
  • 相关阅读:
    JS-只能输入中文和英文
    强密码正则表达式
    java 实体序列化的意义
    数据库中存在0,1,2.....或者1,null,2 排序时让0或者null在最后的sql语句
    Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile 解决办法
    C#中的线程(二) 线程同步基础
    C#中的线程(一)入门
    C#多线程编程
    C#(asp.net )读取ASHX文件(一般处理程序)
    Oracle中三种循环(For、While、Loop)
  • 原文地址:https://www.cnblogs.com/sun-/p/5208788.html
Copyright © 2011-2022 走看看