zoukankan      html  css  js  c++  java
  • java 抽象类

    一 抽象类的产生

      分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是方法功能声明相同,但方

    法功能主体不同。那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。

      描述JavaEE工程师:行为:工作。

      描述Android工程师:行为:工作。

      JavaEE工程师和Android工程师之间有共性,可以进行向上抽取。抽取它们的所属共性类型:研发部员工。

    由于JavaEE工程师和Android工程师都具有工作功能,但是他们具体工作内容却不一样。这时在描述研发部员工时

    ,发现了有些功能(工作)不具体,这些不具体的功能,需要在类中标识出来,通过java中的关键字abstract(抽象)。

    当定义了抽象函数的类也必须被abstract关键字修饰,被abstract关键字修饰的类是抽象类。

     抽象类&抽象方法的定义

    抽象方法定义的格式:

      public abstract 返回值类型 方法名(参数);

    抽象类定义的格式:

      abstract class 类名 {

    }

    例如:

     

    //研发部员工 
    abstract class Developer {
        public abstract void work();//抽象函数。需要abstract修饰,并分号;结束
    }
    
    //JavaEE工程师
    class JavaEE extends Developer{
        public void work() {
            System.out.println("正在研发淘宝网站");
        }
    }
    
    //Android工程师
    class Android extends Developer {
        public void work() {
            System.out.println("正在研发淘宝手机客户端软件");
        }
    }

     

    三 抽象类的特点

    1、抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。

    2、抽象类不可以直接创建对象,原因:调用抽象方法没有意义。

    3、只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。

    之所以继承抽象类,更多的是在思想,是面对共性类型操作会更简单。

    四 抽象类注意事项

    1、抽象类一定是个父类?

      是的,因为不断抽取而来的。

    2、抽象类中是否可以不定义抽象方法。

      是可以的,不让该类创建对象,方法可以直接让子类去使用

    3、抽象关键字abstract不可以和哪些关键字共存?

      1、private:私有的方法子类是无法继承到的,也不存在覆盖,而abstract和private一起使用修饰方

    法,abstract既要子类去实现这个方法,而private修饰子类根本无法得到父类这个方法。互相矛盾。

      2、final

      3、static

    五 举例练习

    例一:

    具体事物:基础班老师,就业班老师
    共性:姓名,年龄,讲课。
    特性:
    基础班老师讲JavaSE
    就业班老师讲Android

    package com.oracle.demo04;
    
    public  abstract class Teacher {
        private String name;
        private int age;
        public abstract void teach();
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public Teacher(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
        public Teacher() {
            super();
        }
        
    }
    package com.oracle.demo04;
    
    public class BasicsTeacher extends Teacher{
        @Override
        public void teach() {
            System.out.println("教授JavaSE");
        }
    }
    package com.oracle.demo04;
    
    public class JobTeacher extends Teacher {
        @Override
        public void teach() {
            System.out.println("教授Android");    
        }
    }

    例二:

    具体事物:基础班学生,就业班学生
    共性:姓名,年龄,学习
    特性:
    基础班学生学JavaSE
    就业班学生学Android

    package com.oracle.demo04;
    
    public abstract class Student {
        private String name;
        private int age;
        public abstract void study();
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public Student(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
        public Student() {
            super();
        }
        
    }
    package com.oracle.demo04;
    
    public class BasicsStudent extends Student {
        @Override
        public void study() {
            System.out.println("学习JavaSE");
        }
    }
    package com.oracle.demo04;
    
    public class JobStudent extends Student{
        @Override
        public void study() {
            System.out.println("学习Android");
        }
    }

    例三:

    已知猫类和狗类:
    属性:毛的颜色,腿的个数
    行为:吃饭
    猫特有行为:抓老鼠catchMouse
    狗特有行为:看家lookHome

    package com.oracle.demo04;
    
    public abstract class Animal {
        private String hairColor;
        private int legNum;
        public void eat(){
            System.out.println("吃饭");
        }
        public abstract void work();
        public String getHairColor() {
            return hairColor;
        }
        public void setHairColor(String hairColor) {
            this.hairColor = hairColor;
        }
        public int getLegNum() {
            return legNum;
        }
        public void setLegNum(int legNum) {
            this.legNum = legNum;
        }
        public Animal(String hairColor, int legNum) {
            super();
            this.hairColor = hairColor;
            this.legNum = legNum;
        }
        public Animal() {
            super();
        }
        
    }
    package com.oracle.demo04;
    
    public class Cat extends Animal {
        @Override
        public void work() {
            System.out.println("捉老鼠");
        }
    }
    package com.oracle.demo04;
    
    public class Dog extends Animal{
        @Override
        public void work() {
            System.out.println("看家");
        }
    }

     

  • 相关阅读:
    Python 数据结构_队列
    Python 数据结构_堆栈
    基于SAP的中国式数据分析浅谈
    基于SAP的中国式数据分析浅谈
    logstash 处理nginx 错误日志
    logstash nginx 访问日志
    其中 (%{WORD:x_forword}|-) |表示或的意思
    grok 官方文档
    vCenter 部件关系简介 & 网络原理
    haproxy nginx 多路径
  • 原文地址:https://www.cnblogs.com/jiejava/p/13247767.html
Copyright © 2011-2022 走看看