重学java 22.面向对象 继承、抽象综合案例

我们纵横交错,最后回到原点

------ 24.4.23

综合案例

流程思维图

代码实现

方式1 利用set方法为属性赋值

父类:

java 复制代码
public abstract class Development extends Employee{

}

子类1:

java 复制代码
public class JavaEE extends Development{

    @Override
    public void work() {
        System.out.println("员工号为"+this.getId()+"的"+this.getName()+"正在开发网站");
    }
}

子类2:

java 复制代码
public class Android extends Development{
    @Override
    public void work() {
        System.out.println("员工号为"+this.getId()+"的"+this.getName()+"正在开发APP");
    }
}

子类的子类:

java 复制代码
public abstract class Employee {
    private int id;
    private String name;

    public Employee() {
    }

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

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public abstract void work();
}

测试类:

java 复制代码
public class Demo117Test {
    public static void main(String[] args) {
        JavaEE javaEE = new JavaEE();
        javaEE.setId(1);
        javaEE.setName("大壮");
        javaEE.work();
        System.out.println("------------------------------------------------------------");
        Android android = new Android();
        android.setId(2);
        android.setName("图图");
        android.work();
    }
}

运行结果:

方式2 利用构造赋值

父类:

java 复制代码
public abstract class Development extends Employee{
    public Development() {
    }

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

子类1:

java 复制代码
public class JavaEE extends Development{
    public JavaEE() {
    }

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

    @Override
    public void work() {
        System.out.println("员工号为"+this.getId()+"的"+this.getName()+"正在开发网站");
    }
}

子类2:

java 复制代码
public class Android extends Development{
    public Android() {
    }

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

    @Override
    public void work() {
        System.out.println("员工号为"+this.getId()+"的"+this.getName()+"正在开发APP");
    }
}

子类的子类:

java 复制代码
public abstract class Employee {
    private int id;
    private String name;

    public Employee() {
    }

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

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public abstract void work();
}

测试类:

java 复制代码
public class Demo118Test2 {
    public static void main(String[] args) {
        JavaEE javaEE = new JavaEE(1,"张三");
        javaEE.work();
        System.out.println("------------------------------------------------------------------");
        Android android = new Android(2,"李四");
        android.work();
    }
}

运行结果:

总结

1.继承

**①概述:**子类继承父类,可以直接使用父类中的非私有成员,子类不要写重复代码,提高了代码的复用率

②关键字: extends

③成员访问特点:a、成员变量:看符号左边是谁先调用谁中的成员变量,子类没有找父类

b、成员方法:看new的是谁先调用谁中的成员方法,子类没有找父类

**④方法的重写:**a、概述:子类中有一个和父类从方法名以及参数列表上一样的方法

b、验证:@Override

c、使用场景:功能的升级改造

**⑤继承中的构造的特点:**new子类对象时先初始化父类

⑥继承的特点:

a、继承只支持单继承,不能多继承

b、继承支持多层继承

c、一个父类可以有多个子类

2.super和this关键字

①super

a、概述:代表的是父类引用

b、使用:调用父类构造方法:super() super(实参)

调用父类成员变量:super.成员变量名

调用父类成员方法:super.成员方法名(实参)

②this

a、概述:代表的是当前对象:哪个对象调用的this所在的方法this就代表哪个对象

b、使用:调用当前对象的构造:this() this(实参)

调用当前对象的成员变量:this.成员变量名

调用当前对象的成员方法:this.成员方法名(实参)

③注意

super和this如果在构造中使用,都必须在第一行,所以不能同时手写出来

3.抽象

①抽象方法:修饰符 abstract 返回值类型 方法名(形参);

②抽象类:public abstract class 类名{}

③特点:

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

b、抽象类中不一定必须有抽象方法

c、抽象类中可以有私有属性构造,其他方法等

d、抽象类不能new对象,只能new子类对象

e、抽象类中可以有构造方法,但是是供创建子类对象时,初始化父类属性使用的

相关推荐
进击的女IT2 分钟前
SpringBoot上传图片实现本地存储以及实现直接上传阿里云OSS
java·spring boot·后端
Miqiuha10 分钟前
lock_guard和unique_lock学习总结
java·数据库·学习
一 乐1 小时前
学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
不知所云,1 小时前
qt cmake自定义资源目录,手动加载资源(图片, qss文件)
开发语言·qt
数云界2 小时前
如何在 DAX 中计算多个周期的移动平均线
java·服务器·前端
安冬的码畜日常2 小时前
【玩转 JS 函数式编程_006】2.2 小试牛刀:用函数式编程(FP)实现事件只触发一次
开发语言·前端·javascript·函数式编程·tdd·fp·jasmine
阑梦清川2 小时前
Java继承、final/protected说明、super/this辨析
java·开发语言
PythonFun2 小时前
Python批量下载PPT模块并实现自动解压
开发语言·python·powerpoint
Death2002 小时前
Qt 6 相比 Qt 5 的主要提升与更新
开发语言·c++·qt·交互·数据可视化
机器视觉知识推荐、就业指导2 小时前
使用Qt实现实时数据动态绘制的折线图示例
开发语言·qt