Java中实现对象拥有部分相同属性的方法

1. 概述

在Java中,我们可以通过继承和实现接口的方式来实现对象拥有部分相同属性的需求。继承是指一个类继承另一个类的属性和方法,而接口是指一组行为的集合,一个类可以实现多个接口。

假设我们有一个名为Person的类,它有两个属性:姓名和年龄。现在我们希望创建两个对象,分别表示两个人,但他们的姓名是相同的,年龄是不同的。我们可以通过继承和实现接口的方式来实现这个需求。

2. 实现步骤

下面是实现这个需求的步骤表格:

步骤 描述
步骤1 创建一个Person类,包含姓名和年龄属性
步骤2 创建一个SameName接口,包含一个返回姓名的方法
步骤3 创建一个DifferentAge接口,包含一个返回年龄的方法
步骤4 创建一个PersonWithDifferentAge类,继承Person类并实现SameName接口和DifferentAge接口
步骤5 PersonWithDifferentAge类中实现SameName接口的方法,返回相同的姓名
步骤6 PersonWithDifferentAge类中实现DifferentAge接口的方法,返回不同的年龄
步骤7 创建两个PersonWithDifferentAge对象,分别调用获取姓名和年龄的方法

3. 具体实现

首先,创建一个Person类,包含姓名和年龄属性:

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

    // 构造方法
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 姓名的getter方法
    public String getName() {
        return name;
    }

    // 年龄的getter方法
    public int getAge() {
        return age;
    }
}

然后,创建一个SameName接口,包含一个返回姓名的方法:

public interface SameName {
    String getName();
}

接着,创建一个DifferentAge接口,包含一个返回年龄的方法:

public interface DifferentAge {
    int getAge();
}

接下来,创建一个PersonWithDifferentAge类,继承Person类并实现SameName接口和DifferentAge接口:

public class PersonWithDifferentAge extends Person implements SameName, DifferentAge {

    // 构造方法
    public PersonWithDifferentAge(String name, int age) {
        super(name, age);
    }

    // 实现SameName接口的getName方法
    @Override
    public String getName() {
        return super.getName();
    }

    // 实现DifferentAge接口的getAge方法
    @Override
    public int getAge() {
        return super.getAge();
    }
}

最后,创建两个PersonWithDifferentAge对象,分别调用获取姓名和年龄的方法:

public class Main {
    public static void main(String[] args) {
        PersonWithDifferentAge person1 = new PersonWithDifferentAge("Tom", 20);
        PersonWithDifferentAge person2 = new PersonWithDifferentAge("Tom", 25);

        System.out.println(person1.getName());  // 输出 "Tom"
        System.out.println(person2.getName());  // 输出 "Tom"
        System.out.println(person1.getAge());   // 输出 20
        System.out.println(person2.getAge());   // 输出 25
    }
}

4. 序列图

下面是使用Mermaid语法绘制的序列图:

sequenceDiagram
    participant Person
    participant SameName
    participant DifferentAge
    participant PersonWithDifferentAge
    participant Main
    
    Main ->> PersonWithDifferentAge: 创建对象1
    PersonWithDifferentAge ->> Person: 调用构造方法,传入姓名和年龄
    PersonWithDifferentAge ->> SameName: 实现getName方法
    PersonWithDifferentAge ->> DifferentAge: 实现getAge方法
    Main ->> PersonWithDifferentAge: 创建对象2
    PersonWithDifferentAge ->> Person: 调用构造方法