vendredi 5 juin 2020

Inheritance in Java and how are members inherited

I was looking into the builder design pattern and ran into a bug. Why is the Person member from PersonBuilder class different in DetailsBuilder and JobBuilder classes? Shouldn't they be the same object and the org and name functions update the same object?

When I run the code I get the following output:

Person{name='name', org='null'}
Person{name='name', org='null'}
Person{name='null', org='org'}
Person{name='null', org='org'}

Code:

class Person
{
    public String name;
    public String org;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", org='" + org + '\'' +
                '}';
    }
}

class PersonBuilder {
    Person person = new Person();

    public DetailsBuilder details() {
        System.out.println(person);
        return new DetailsBuilder();
    }
    public JobBuilder job() {
        System.out.println(person);
        return new JobBuilder();
    }
    public Person build(){
        return person;
    }
}

class DetailsBuilder extends PersonBuilder{

    public PersonBuilder name(String name) {
        this.person.name = name;
        System.out.println(person);
        return this;
    }
}

class JobBuilder extends PersonBuilder{


    public PersonBuilder org(String org) {
        this.person.org = org;
        System.out.println(person);
        return this;
    }
}

public class Main {

    public static void main(String[] args) {
        PersonBuilder personBuilder = new PersonBuilder();
        Person p = personBuilder.details().name("name").job().org("org").build();
        System.out.println(p);

    }
}

Aucun commentaire:

Enregistrer un commentaire