Java的抽象类

当父类的某些方法需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类

java 复制代码
package com.abstract_;

public class Abstract01 {
    public static void main(String[] args) {

    }
}
//class Animal{
//    private String name;
//    public Animal(String name) {
//        this.name = name;
//    }
//    //当父类的某些方法需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类
//    public void eat(){
//        //这里的方法体内不确定要写什么,例如不确定动物都吃些什么
//    }
//}

abstract class Animal{  //声明为抽象类
    private String name;
    public Animal(String name) {
        this.name = name;
    }
    public abstract void eat(); //声明为抽象方法
}
复制代码
父类方法不确定性问题
1.考虑将该方法设计为抽象(abstract)类
2.所谓抽象方法就是没有实现的方法
3.所谓没有实现就是指,没有方法体
4.当一个类中存在抽象方法时,需要将该类声明为abstract
5.一般来说,抽象类会被继承,由其子类来实现

抽象类的介绍:

1)用abstract 关键字来修饰一个类时,这个类就叫抽象类

访问修饰符 abstract 类名{

}

2)用abstract关键字修饰一个方法时,这个方法就是抽象方法

访问修饰符 abstract 返回类型 方法名(形参列表); //没有方法体

3)抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类

4)抽象类在框架和设计模式中使用较多

抽象类使用的注意事项和细节讨论:

1)抽象类不能被实例化

2)抽象类不一定要包含abstract方法,也就是说,抽象类可以没有abstract方法

3)一旦类包含了abstract方法,则这个类必须声明为abstract

4)abstract只能修饰类和方法,不能修饰属性和其他的

5)抽象类可以有任意成员(因为抽象类也是类),比如非抽象方法,构造器,静态属性等等

6)抽象方法不能有主体,即不能实现

/

7)如果一个类继承了抽象类,则它必须实现抽象类的所有方法,除非它自己也声明为abstract类

java 复制代码
//如果一个类继承了抽象类,则它必须实现抽象类的所有方法,除非它自己也声明为abstract类
abstract class E{
    public abstract void hi();
}
abstract class F extends E {
}
class G extends F{
    @Override
    public void hi() {
        System.out.println("泥嚎");//只要有大括号就可以成为实现,哪怕方法体内什么也没有
    }
}

8)抽象方法不能用private,final,static修饰,因为这些关键字都适合重写相违背的(重要)

习题:

java 复制代码
package com.abstract_;

public class AbstractExercise {
    public static void main(String[] args) {
        Employee commonEmployee = new CommonEmployee("张三","123",15000);
        Employee Manage = new Manager("李四","456",50000);

        System.out.println(commonEmployee.work());
        System.out.println(Manage.work());
    }
}
//编写一个Employee类,声明为抽象类,包含下面三个属性:name,id,salary.
//提供必要的构造器和抽象方法,work().对于Manager来说,他既是员工,还具有奖金(bonus)属性.
//请使用继承的思想,设计CommonEmployee类和Manager类
//要求类中提供必要的方法进行属性访问,实现work(),提示:"经理/普通员工 名字 工作中....."
abstract class Employee{
    private String name;
    private String id;
    private double salary;


    public Employee(String name, String id, double salary) {
        this.name = name;
        this.id = id;
        this.salary = salary;
    }

    public abstract String work();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}
class CommonEmployee extends Employee{
    public CommonEmployee(String name, String id, double salary) {
        super(name, id, salary);
    }

    @Override
    public String work() {
        return "普通员工" + super.getName() + "工作中......";
    }
}
class Manager extends Employee{
    private double bonus;

    public Manager(String name, String id, double salary) {
        super(name, id, salary);
    }

    public double getBonus() {
        return bonus;
    }

    public void setBonus(double bonus) {
        this.bonus = bonus;
    }

    @Override
    public String work() {
        return "经理" + super.getName() + "工作中......";
    }
}
相关推荐
萧瑟余晖几秒前
Spring Integration企业集成概览详解
java·后端·spring
Dovis(誓平步青云)3 分钟前
拖动关键帧角色就抽动,动画编辑器怎样补齐中间状态
开发语言·前端·javascript·机器学习·编辑器
行走的陀螺仪7 分钟前
Claude Code 从入门到实战(二):Bash工具、Plan模式与后台任务
开发语言·bash
这个昵称不容易8 分钟前
SpringBoot 墙绘交易平台毕设:128个文件154个接口含论文,带运行截图
java·springboot·毕设
努力努力再努力wz12 分钟前
【Lua 入门系列】从执行模型到事件驱动:一文理解 Lua 有栈协程、挂起恢复与协作式调度
开发语言·lua
SimonKing13 分钟前
告别纸质合同,使用DocuSeal搭建私有电子签平台
java·后端·程序员
七夜zippoe16 分钟前
Spring AI 函数调用:让 Java 方法变成 Agent 的工具(实战全流程)
java·人工智能·spring·ai·agent·函数调用
萧瑟余晖23 分钟前
Spring Batch 高级特性与实践详解
java·spring·batch
她说..23 分钟前
常见设计模式-观察者模式
java·spring boot·spring·观察者模式·设计模式
vipxieliang27 分钟前
Actuator 与 Micrometer:生产级监控体系搭建
java·spring boot