教你从实战中领悟继承(上) | 带你学《Java面向对象编程》之四十二

简介: 本节将结合学校情景与职场情景进行简单类编写实战,通过符合常识的逻辑抽象体现继承的理念。

上一篇:再生与终结-初识属性覆盖与final | 带你学《Java面向对象编程》之四十一
【本节目标】
通过阅读本节内容,你将进一步掌握简单类及其常见属性、方法的编写过程,进一步理解继承的意义。

继承分析案例

下面将通过几个简短的程序要求对于继承的概念进行巩固。对于程序开发而言,简单Java类是其最基础的组成,也是所有概念最好的融合。

案例分析一(学生类)

建立一个人类(Person)和学生类(Student) ,功能要求如下:
(1)Person中包含4个私有型的数据成员name、addr、Sex、age,分别为字符串型、字符串型、字符型及整型,表示姓名、地址、性别和年龄。一个4参构造方法、一个两参构造方法、一个无参构造方法、一个输出方法显示4种属性。
(2) Student类继承Person类, 并增加成员math、english存放数学和英语成绩。一个6参构造方法、一个两参构造方法、一个无参构造方法和重写输出方法用于显示6种属性。
正常来讲,进行一个程序类开发的时候是不需要去考虑子类的问题的,也就是说现在需要做的是进行程序功能的完善定义。所以首先来定义的就是Person类。

class Person {
    private String name ;
    private String addr ;
    private char sex ;
    private int age ;
    public Person() {}
    public Person(String name , String addr) {
        this(name ,addr ,’男’ , 0) ;
    }
    public Person(String name , String addr , char sex , int age) {
        this.name = name ;
        this.addr = addr ;
        this.sex = sex ;
        this.age = age ;
    }
    public String getInfo () {
        return ”姓名:” + this.name + “、地址:” + this.addr + “、性别:” + this.sex + “、年龄:” + this.age ;
    }
}
class Student extends Person {
    private double math ;
    private double english ;
    public Student() {}
    public Student(String name , String addr) {
        super(name,addr) ;
    }
    public Student(String name , String addr , char sex, int age , double math, double english) {
        super(name ,addr, sex,age) ;
        this.math = math ;
        this.english = english ;
    }
    public String getInfo () {
        return super.getInfo() + “、数学成绩:” + this.math + “、英语成绩:” + this.english ;
    }
}
public class JavaDemo{
    public static void main(String args[]) {
      Student stu = new Student(“张三” , “天安门” , “男” , 12 ,78.99 , 89.98) ;
      System.out.println(stu.getInfo()) ;
    }         
}

image.png
图一 执行结果一

在这样的操作案例里面发现子类对象实例化、构造方法调用、方法覆写全部都有了。

案例分析二(管理人员与职员)

定义员工类,具有姓名、年龄、性别属性,并具有构造方法和显示数据方法。
定义管理层类,继承员工类, 并有自己的属性职务和年薪。 定义职员类,继承员工类,并有自己的属性所属部门和月薪。

class Employee {
    private String name ;
    private int age ;
    private String sex ;
    public Employee() {}
    public Employee(String name , int age , String sex) {
        this.name = name ;
        this.age = age ;
        this.sex = sex ;
    }
    public String getInfo() {
        return “姓名:” + this.name + “、年龄:” + this.age + “、性别:” + this.sex ;
    }
}  
class Manager extends Employee {    //管理层
    private String job ;
    private double income ;
    public Manager () {}
    public Manager (String name , int age , String sex , String job , double income) {
        super(name , age , sex) ;
        this.job = job ;
        this.income = income ;
    }
    public String getInfo() {
        return “【管理层】”super.getInfo() + “、职务:” + this.job + “、年薪:” + this.income ;
    }
}
class Staff extends Employee {
    private String dept ;
    private double salary ;
    public Staff () {}
    public Staff (String name , int age , String sex , String dept , double salary) {
        super(name , age , sex) ;
        this.dept = dept ;
        this.salary = salary ;
    }
    public String getInfo() {
        return “【职员】”super.getInfo() + “、部门:” + this.dept + “、月薪:” + this.salary ;
    }
public class JavaDemo{
    public static void main(String args[]) {
        Manager man = new Manager(“张三” , 38 ,”女” , “主管” , 150000.00) ;
        Staff sta = new Staff(“李四” , 18 ,”男” , “出纳” , 3000.00) ;
        System.out.println(man.getInfo()) ;
        System.out.println(sta.getInfo()) ;
    }         
}

image.png
图二 执行结果二

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:教你从实战中领悟继承(中) | 带你学《Java面向对象编程》之四十三
更多Java面向对象编程文章查看此处

相关文章
|
2天前
|
Java
04|零基础玩转面向对象编程:Java OOP
04|零基础玩转面向对象编程:Java OOP
5 0
|
2天前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
|
3天前
|
Java 编译器 开发者
Java一分钟之-继承:复用与扩展类的特性
【5月更文挑战第9天】本文探讨了Java中的继承机制,通过实例展示了如何使用`extends`创建子类继承父类的属性和方法。文章列举了常见问题和易错点,如构造器调用、方法覆盖、访问权限和类型转换,并提供了解决方案。建议深入理解继承原理,谨慎设计类结构,利用抽象类和接口以提高代码复用和扩展性。正确应用继承能构建更清晰、灵活的代码结构,提升面向对象设计能力。
9 0
|
3天前
|
Java
java面向对象——包+继承+多态(一)-2
java面向对象——包+继承+多态(一)
16 3
|
3天前
|
SQL Java 编译器
java面向对象——包+继承+多态(一)-1
java面向对象——包+继承+多态(一)
16 2
|
4天前
|
存储 Java 程序员
Java面向对象编程的基础概念解析
Java面向对象编程的基础概念解析
13 0
|
4天前
|
Java
Java一分钟之-类与对象:面向对象编程入门
【5月更文挑战第8天】本文为Java面向对象编程的入门指南,介绍了类与对象的基础概念、常见问题及规避策略。文章通过代码示例展示了如何定义类,包括访问修饰符的适当使用、构造器的设计以及方法的封装。同时,讨论了对象创建与使用时可能遇到的内存泄漏、空指针异常和数据不一致等问题,并提供了相应的解决建议。学习OOP需注重理论与实践相结合,不断编写和优化代码。
26 1
|
1天前
|
Java
Java一分钟:线程协作:wait(), notify(), notifyAll()
【5月更文挑战第11天】本文介绍了Java多线程编程中的`wait()`, `notify()`, `notifyAll()`方法,它们用于线程间通信和同步。这些方法在`synchronized`代码块中使用,控制线程执行和资源访问。文章讨论了常见问题,如死锁、未捕获异常、同步使用错误及通知错误,并提供了生产者-消费者模型的示例代码,强调理解并正确使用这些方法对实现线程协作的重要性。
10 3
|
1天前
|
安全 算法 Java
Java一分钟:线程同步:synchronized关键字
【5月更文挑战第11天】Java中的`synchronized`关键字用于线程同步,防止竞态条件,确保数据一致性。本文介绍了其工作原理、常见问题及避免策略。同步方法和同步代码块是两种使用形式,需注意避免死锁、过度使用导致的性能影响以及理解锁的可重入性和升级降级机制。示例展示了同步方法和代码块的运用,以及如何避免死锁。正确使用`synchronized`是编写多线程安全代码的核心。
37 2
|
1天前
|
安全 Java 调度
Java一分钟:多线程编程初步:Thread类与Runnable接口
【5月更文挑战第11天】本文介绍了Java中创建线程的两种方式:继承Thread类和实现Runnable接口,并讨论了多线程编程中的常见问题,如资源浪费、线程安全、死锁和优先级问题,提出了解决策略。示例展示了线程通信的生产者-消费者模型,强调理解和掌握线程操作对编写高效并发程序的重要性。
33 3