Skip to content
Advertisement

How can I make my program run the validation code in my sub-class rather than the parent class?

As the title suggests, I was wondering if there was a way to make my program execute the validation code in the constructor of my sub-class, instead of the validation code in the constructor in my parent class? Here is a very basic example:

Here I have the constructor of my Teacher class, which throws an exception if age < 18

Teacher(String name, int age) throws InvalidAgeException {
        this.name = name;
        this.age = age;

        if(age < 18){
            throw new InvalidAgeException();
        }

    }
}

And here is the constructor & main method of my Student class, where I would like an exception to be thrown if age > 18, rather than throwing an Exception because age < 18.

    Student(String name, int age) throws InvalidAgeException{
        super(name, age);

        if(age > 18){
            throw new InvalidAgeException();
        }

    }

    public static void main (String[] args) throws InvalidAgeException {
        try {
            Teacher teacher = new Teacher("Matt Jones", 29);
            Student student = new Student ("Liam Price", 16);
        }catch(InvalidAgeException e){
            System.out.println("Invalid age");
        }
    }
}

How could I re-write my code so that different validation checks can be carried out depending on the object being created? This is something I’ve found confusing in a few of my projects.

Thanks

Advertisement

Answer

Your code will check both validations in the sub-class, since you’re using the super() method. But having contradicting validations violates principles of good design, as a subclass be applicable anywhere the super class is applicable.

Instead of writing the validation in the constructor, it’s possible that you could write the validation as another method.

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement