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

发布于:2024-04-24 ⋅ 阅读:(142) ⋅ 点赞:(0)

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

                                —— 24.4.23

综合案例

流程思维图

代码实现

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

父类:

public abstract class Development extends Employee{

}

子类1:

public class JavaEE extends Development{

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

子类2:

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

 子类的子类:

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();
}

测试类:

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 利用构造赋值

父类:

public abstract class Development extends Employee{
    public Development() {
    }

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

子类1:

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:

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");
    }
}

 子类的子类:

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();
}

测试类:

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、抽象类中可以有构造方法,但是是供创建子类对象时,初始化父类属性使用的