java-day09-抽象类

9.1 概述

描述狗:吼叫。
描述狼:吼叫。
两个事物具备共性,向上抽取。犬科具备吼叫功能。

描述一个事物,却没有足够的信息,这时就将这个事物成为抽象事物。 abstract
面对抽象的事物,虽然不具体,但是可以简单化,不用面对具体的事物。

abstract class 犬科{      //抽象类
	abstract void 吼叫();	
}

class 狗 extends 犬科{
	void 吼叫(){
		System.out.println("汪");
	}
}

class 狼 extends 犬科{
	void 吼叫(){
		System.out.println("嗷");
	}
}

9.2 抽象类-特点

特点:

  1. 抽象方法一定定义在抽象类中,都需要用abstract来修饰。抽象类中可以有不是抽象的方法。
  2. 抽象类不能实例化,不能用new关键字创建对象。
  3. 只有子类覆盖了所有的抽象方法后,子类具体化,子类就可以创建对象。如果没有覆盖所有的抽象方法,那子类还是抽象类。、

抽象类也是不断向上抽取得来的。抽取了方法的声明而不确定具体的方法内容。由不同的子类来完成具体的方法内容。

9.3 抽象类-细节

问题:

  1. 抽象类中有构造函数吗?
    抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。在继承了抽象类的子类中通过super()或super(参数列表)调用抽象类中的构造方法。

    抽象类和一般类的异同点?
    相同:都是用来表述事物,都可以进行属性和行为的描述。
    不同:抽象类描述事物的信息不具体,一般类描述事物的信息具体。

    代码的不同:
    抽象类中可以定义抽象方法,一般类不行。
    抽象类不可以实例化,一本类可以实例化。

  2. 抽象类一定是一个父类吗?
    是的。必须需要子类覆盖抽象方法后,才可以实例化,使用这些方法。

  3. 抽象类中可以不定义抽象方法吗?
    可以的。仅仅是让该类不能创建对象。

  4. 抽象关键字abstract和哪些关键字不能共存?
    final:被final修饰的方法,不能被覆盖,但是abstract修饰的方法一定要被子类覆盖。
    private:函数私有化,子类不能访问
    static:静态方法可以直接类名调用,不需要对象调用,但是这时候抽象方法没有意义,因为没有被实现。

9.4 抽象类-练习

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

分析:问题领域中:
程序员
属性:姓名、工号、薪水
行为:工作内容

项目经理
属性:姓名、工号、薪水、奖金
行为:工作内容

两者都不存在所属关系,但是有共性内容,可以向上抽取。
两者的共性类型是什么?雇员。

雇员
属性:姓名、工号、薪水
行为:工作。

public abstract class Employee {
    private String name;
    private String id;
    private double pay;
    
    Employee(String name,String id,int pay){
        this.name = name;
        this.id = id;
        this.pay = pay;
    }
    
    //工作内容
    public abstract void work();
}

//描述程序员
class Programmer extends Employee{
    Programmer(String name,String id,int pay){
        super(name,id,pay);
    }
    public void work(){
        System.out.println("code");
    }
}

//描述经理
class Manager extends Employee{
    private double bouns;
    Manager(String name,String id,int pay,double bouns){
        super(name,id,pay);
        this.bouns = bouns;
    }
    public void work(){
        System.out.println("manager");
    }
}

猜你喜欢

转载自blog.csdn.net/lwycc2333/article/details/83858528