Java继承

1.继承

1.1 java继承概述

        继承是面向对象的三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。

        继承是指在原有类的基础上,进行功能扩展,创建新的类型。

  • 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
  • JAVA中类只有单继承,没有多继承!
  • 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。
  • 继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示。
  • 子类和父类之间,从意义上讲应该具有"is-a"的关系。
  • extends的意思是“扩展”,子类是父类的扩展。

1.2 继承的格式

  • 格式: public class 子类名 extends 父类名{}
  • 例如: public class Zi extends Fu {}
  • Fu:是父类,也被称为基类、超类
  • Zi: 是子类,也被称为派生类

1.3 例

        我们可以先创建个父类:

// 父类
public class Person {
    public int date = 1;
    public void name(){

        System.out.println("姓名");
    }
}

         创建一个子类student:

//student is person
//student也叫派生类或者子类
//子类可以继承父类的所有方法
public class Student extends Person{
}

 再创建main类来测试

public class Main {
    public static void main(String[] args) {
        Student student = new Student();
        student.name();
        System.out.println((student.date));
    }
}

 结果如下:

1.4 继承的优缺点

继承优点:

  • 实现了数据和方法的共享
  • 提高了代码的复用性(多个类相同的成员可以放到同一个类中)
  • 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
  • 提高了代码的可扩展性

继承缺点:

  • 继承让类与类之间产生了关系,类的联合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性

 1.5 super

super 关键字的用法和 this 关键字的用法相似

  • this:代表本类对象的引用(可以理解为代表本类对象的引用)
  • super:代表父类存储空间的标识(可以理解为父类对象引用)

 1.6 习题

我们可以先创建一个名为inheritance的包,将代码放在次包中

package inheritance;

import java.time.LocalDate;

public class Employee {
    private final String name; // 姓名
    private double salary; // 薪水
    private final LocalDate hireDay; // 入职日期

    public Employee(String name, double salary, int year, int month, int day) {
        this.name = name;
        this.salary = salary;
        hireDay = LocalDate.of(year, month, day);
    }

    public String getName() {
        return name;
    }

    public double getSalary() {
        return salary;
    }

    public LocalDate getHireDay() {
        return hireDay;
    }

    public void raiseSalary(double byPercent) {
        double raise = salary * byPercent / 100;
        salary += raise;
    }
}
package inheritance;

public class Manager extends Employee {
    private double bonus; // 奖金

    public Manager(String name, double salary, int year, int month, int day) {
        super(name, salary, year, month, day);
    }

    public double getSalary() {
        double baseSalary = super.getSalary(); // 获取基本工资
        return baseSalary + bonus; // 薪水=基本工资+奖金
    }

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

 

package inheritance;

public class ManagerTest {
    public static void main(String[] args) {
        // 创建一个Manager对象,固定工资为15000
        Manager boss = new Manager("张三", 15000, 2019, 7, 1);
        boss.setBonus(5000); // 设置额外5000奖金
        Employee[] staff = new Employee[3];
        // 用Manager对象以及Employee对象填充员工数组,这里涉及"多态",可自行预学
        staff[0] = boss;
        staff[1] = new Employee("李四", 5000, 2022, 7, 15);
        staff[2] = new Employee("王五", 6500, 2023, 7, 15);

        // 输出所有员工对象的信息
        for (Employee e : staff) {
            System.out.printf("name=%s,salary=%.2f\n", e.getName(), e.getSalary());
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值