抽象相关学习

一、基本概念和使用:

1.抽象类怎么来的?

抽取共性方法,放到父类中,发现方法没法实现,因为每个子类对此方法的实现细节不一样,此时父类中的方法体说不清道不明,可以定义成抽象方法。

抽象方法所在的类一定是抽象类

2.关键字:abstract
3.抽象方法:

修饰符 abstract 返回值类型 方法名(参数)

4.抽象类:

public abstract class 类名{}

5.注意:

a.抽象方法所在的类一定是抽象类;

b.抽象类中不一定有抽象方法;

c.子类继承父类之后,需要重写父类中的抽象方法,不然编译报错;

d.抽象类不能new对象,只能通过new子类对象调动重写方法。

6.可以将抽象类看成是一类事物的标准,要求只要是属于这一类的,都必须要拥有抽象类中的方法,必须要实现,怎么证明拥有了,怎么证明实现了? --> 重写

至于这个方法怎么实现,就看子类重写之后怎么写方法体了。

二、注意事项

1.抽象类不能直接new对象,只能创建非抽象子类的对象;

2.抽象类中不一定非得有抽象方法,但是抽象方法所在的类一定是抽象类;

3.抽象类的子类,必须重写父类中的所有抽象方法,否则,编译报错,除非该子类也是抽象类;

4.抽象类中可以有成员变量,构造、成员方法;

5.抽象类中可以有构造方法,是供子类创建对象时,初始化父类属性使用的(需要用到super)。

三、综合案例:

某工T公司有多名员工,按照员工负责的工作不同,进行了部门的划分(研发部、维护部)。研发部(Developer)根据所雷研发的内容不同,又分为JavaEE工程师、Android工程师;维护部(Maintainer)根据所维护的内容不同,又分为网络维护工程师(Network)、硬件维护工程师(Hardware)公司的每名员工都有他们自己的员工编号、姓名,并要做它们所负责的工作。

工作内容:

JavaEE工程师:员工号为xxx的xxx员工,正在研发电商网站

Android工程师:员工号为xxx的xxx员工,正在研发电商的手机客户端软件

网络维护工程师:员工号为xxx的xxx员工,正在检查网络是否畅週

硬件维护工程师:员工号为xxx的xxx员工,正在修复电脑主板

Developer类:

java 复制代码
public abstract class Developer {

    int id;
    String name;

    public Developer() {
    }

    public Developer(int id, String name) {
        this.id = id;
        this.name = name;
    }

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

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

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public abstract String work();
}

Maintainer类:

java 复制代码
public abstract class Maintainer {

    int id;
    String name;

    public Maintainer() {
    }

    public Maintainer(int id, String name) {
        this.id = id;
        this.name = name;
    }

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

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

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public abstract String work();
}
java 复制代码
public class JavaEE extends Developer{

    public JavaEE() {
    }

    public JavaEE(int id, String name) {
        super(id, name);
    }

    public String work(){

        return "正在研发电商网站";
    }
}
java 复制代码
public class Android extends Developer{

    public Android() {
    }

    public Android(int id, String name) {
        super(id, name);
    }

    public String work(){

        return "正在研发电商的手机客户端软件";
    }
}
java 复制代码
public class Network extends Maintainer{

    public Network() {
    }

    public Network(int id, String name) {
        super(id, name);
    }

    public String work(){
        return "正在检查网络是否通畅";
    }
}
java 复制代码
public class Hardware extends Maintainer{

    public Hardware() {
    }

    public Hardware(int id, String name) {
        super(id, name);
    }

    public String work(){
        return "正在修复电脑主板";
    }
}
java 复制代码
public class Text {
    public static void main(String[] args) {
        JavaEE je = new JavaEE(123,"李明");
        System.out.println("员工号为" + je.id+ "的" + je.name + "员工," + je.work());

        Android ar = new Android(789,"张强");
        System.out.println("员工号为" + ar.id + "的" + ar.name + "员工," + ar.work());

        Network nw = new Network(456,"王竹");
        System.out.println("员工号为" + nw.id + "的" + nw.name + "员工," + nw.work());

        Hardware hw = new Hardware(753,"何琳");
        System.out.println("员工号为" + hw.id + "的" + hw.name + "员工," + hw.work());

    }
}

运行结果:

属性赋值即用了子类中构造方法中的super(),从而给父类属性赋值。还可以用set方法来设计。

相关推荐
cfm_29141 分钟前
ThreadLocal 内存泄漏
java·jvm
NJCloud7 分钟前
Docker 镜像管理:分层结构、构建优化与最佳实践
java·docker·容器
vipxieliang14 分钟前
收货地址验证完整方案:省市区与详细地址
java·spring boot
Json____22 分钟前
java-宿舍安全卫生检查系统项目源码
java·前端·javascript·课程设计·it学习·wwwoop.com
zzzll111136 分钟前
LangChain4j:Java 生态的 AI 应用开发利器
java·开发语言·人工智能
硬件yun41 分钟前
学功能安全
学习·安全·汽车
火眼金睛炼单词41 分钟前
图像记单词:视觉化学习能否破解英语记忆难题
学习
一条破秋裤44 分钟前
STM32 学习笔记:GPIO 输出原理与硬件设计
笔记·stm32·学习
andrsted1 小时前
作业发布、课堂检测和错题讲评,用一个小程序完成
学习·微信小程序·小程序·学习方法
2601_967338711 小时前
尚硅谷2026尚硅谷Java全栈+Python智能体教程
java·人工智能