抽象相关学习

一、基本概念和使用:

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方法来设计。

相关推荐
WeiXiao_Hyy5 小时前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
ZH15455891315 小时前
Flutter for OpenHarmony Python学习助手实战:面向对象编程实战的实现
python·学习·flutter
苏渡苇5 小时前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·设计模式·学习方法·责任链模式
团子的二进制世界5 小时前
G1垃圾收集器是如何工作的?
java·jvm·算法
简佐义的博客5 小时前
生信入门进阶指南:学习顶级实验室多组学整合方案,构建肾脏细胞空间分子图谱
人工智能·学习
long3165 小时前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法
近津薪荼5 小时前
dfs专题4——二叉树的深搜(验证二叉搜索树)
c++·学习·算法·深度优先
rannn_1115 小时前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
灵感菇_5 小时前
Java HashMap全面解析
java·开发语言
qq_12498707535 小时前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计