java继承中的格式与语法、方法重写、extends、this、super、System、out、println、@Override


案例一

需求

人类: (Person)
成员变量: 姓名, 年龄

老师类
成员变量: 姓名, 年龄
成员方法: teach
姓名为张三, 年龄为30岁的老师正在讲课

学生类
成员变量: 姓名, 年龄, 成绩
成员方法: study
姓名为李四, 年龄为20岁, 成绩为100分的学生, 正在学习


父类

package test;

public class Person {
    
    
    private String name;
    private int age;

    public Person() {
    
     }

    public Person(String name, int age) {
    
    
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
    
    
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
    
    
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
    
    
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
    
    
        this.age = age;
    }
}

子类

老师类

package test;

public class Teacher extends Person {
    
    
    public Teacher() {
    
     }

    public Teacher(String name, int age) {
    
    
        super(name, age);
    }

    public void teach() {
    
    
        System.out.println("姓名为" + super.getName() + ", 年龄为" + super.getAge() + "岁的老师正在讲课");
    }
}

学生类

package test;

public class Student extends Person {
    
    
    private double score;

    public Student() {
    
     }
    
    public Student(String name, int age, double score) {
    
    
        super(name, age);
        this.score = score;
    }

    public double getScore() {
    
    
        return score;
    }

    public void setScore(double score) {
    
    
        this.score = score;
    }

    public void study() {
    
    
    	// 因为在同一个类中
    	// 所以score可以直接使用,不需要用this关键字
        System.out.println("姓名为" + super.getName() + ", 年龄为" + super.getAge() + "岁, 成绩为" + score + "分的学生, 正在学习");
    }
}

主方法

package test;

public class Test1 {
    
    
    public static void main(String[] args) {
    
    
        Teacher t = new Teacher("张三", 30);
        t.teach();

        Student stu = new Student("李四", 20, 100);
        stu.study();
    }
}

案例二

需求

员工类: Employee
成员变量: 姓名,年龄,工资
成员方法: work方法
1、私有成员变量
2、提供空参,带参构造函数
3、提供setXxx和getXxx方法
4、编写work方法(员工工作…)

程序员类: Coder
成员变量: 姓名、年龄、工资
成员方法: work方法
姓名为张三,年龄为23,工资为15000的程序员正在编写代码
1、继承Employee父类
2、提供空参和带参构造函数
3、重写work方法

项目经理类: Manager
成员变量: 姓名,年龄,工资,奖金
成员方法: work方法
姓名为李四,年龄为24,工资为18000,奖金为5000的项目经理正在分配任务…
1、继承Employee父类
2、编写子类特有的成员变量(奖金)。私有化,提供setXxx和getXxx方法
3、提供空参和带参构造函数
4、重写work方法


父类(员工类)

package test;

public class Employee {
    
    
    private String name;
    private int age;
    private double salary;

    public Employee() {
    
     }

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

    /**
     * 获取
     *
     * @return name
     */
    public String getName() {
    
    
        return name;
    }

    /**
     * 设置
     *
     * @param name
     */
    public void setName(String name) {
    
    
        this.name = name;
    }

    /**
     * 获取
     *
     * @return age
     */
    public int getAge() {
    
    
        return age;
    }

    /**
     * 设置
     *
     * @param age
     */
    public void setAge(int age) {
    
    
        this.age = age;
    }

    /**
     * 获取
     *
     * @return salary
     */
    public double getSalary() {
    
    
        return salary;
    }

    /**
     * 设置
     *
     * @param salary
     */
    public void setSalary(double salary) {
    
    
        this.salary = salary;
    }

    public void work() {
    
    
        System.out.println("员工工作...");
    }
}

子类

程序员类

package test;

public class Coder extends Employee {
    
    
    public Coder() {
    
     }

    public Coder(String name, int age, double salary) {
    
    
        super(name, age, salary);
    }

    @Override
    public void work() {
    
    
        System.out.println("姓名为:" + getName() + ", 年龄为:" + getAge() + ", 工资为" + getSalary() + "的程序员正在编写代码");
    }
}

项目经理类

package test;

public class Manager extends Employee {
    
    
    private double bonus;

    public Manager() {
    
     }

    public Manager(String name, int age, double salary, double bonus) {
    
    
        super(name, age, salary);
        this.bonus = bonus;
    }

    public double getBonus() {
    
    
        return bonus;
    }

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

    @Override
    public void work() {
    
    
        System.out.println("姓名为:" + getName() + ", 年龄为:" + getAge() + ", 工资为:" + getSalary() + ", 奖金为:" + bonus + "的项目经理正在分配任务");
    }
}

主方法

package test;

public class Test2 {
    
    
    public static void main(String[] args) {
    
    
        Coder c = new Coder("张三", 23, 15000);
        c.work();

        Manager m = new Manager("李四", 24, 18000, 5000);
        m.work();
    }
}

this和super

关键字 访问成员变量 访问成员方法 访问构造方法
this this.本类 成员变量; this.本类成员方法(); this(); this(...); 本类构造方法
super super.父类成员变量; super.父类成员方法(); super(); super(...); 父类构造方法

this代表本类对象的应用
super代表父类存储空间的标识

this()super()都在争夺构造方法第一行位置,所以二者不能共存。

猜你喜欢

转载自blog.csdn.net/weixin_51157081/article/details/131905301