Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to reduce code by using a superclass?

I would like to refactor some code that currently consists of a superclass and two subclasses.

These are my classes:

public class Animal {     int a;     int b;     int c; }  public class Dog extends Animal {     int d;     int e; }  public class Cat extends Animal {     int f;      int g; } 

This is my current code:

ArrayList<Animal> listAnimal = new ArrayList<>();  if (condition) {     Dog dog = new Dog();     dog.setA(..);     dog.setB(..);     dog.setC(..);     dog.setD(..);     dog.setE(..);        listAnimal.add(dog);  } else {     Cat cat = new Cat();     cat.setA(..);     cat.setB(..);     cat.setC(..);     cat.setF(..);     cat.setG(..);     listAnimal.add(cat); } 

How can I refactor the code regarding the common attributes?

I would like something like that:

Animal animal = new Animal(); animal.setA(..); animal.setB(..); animal.setC(..);  if (condition) {     Dog anim = (Dog) animal; //I know it doesn't work     anim.setD(..);     anim.setE(..);   } else {     Cat anim = (Cat) animal; //I know it doesn't work     anim.setF(..);     anim.setG(..); }  listAnimal.add(anim); 
like image 224
Jax Teller Avatar asked Sep 26 '18 08:09

Jax Teller


People also ask

What are superclass methods?

The superclass method is used to access the parent class inside a child class. This method has a variety of uses when inheriting parent members.

Can subclass use superclass methods?

Yes, you can call the methods of the superclass from static methods of the subclass (using the object of subclass or the object of the superclass).

What is superclass programming?

In object-oriented programming, a class from which other classes inherit code is called a superclass. Furthermore, the class that inherits the code is called a subclass of that superclass. Typically, a subclass inherits the instance variables and member functions of its superclass.

What is a superclass example?

A superclass is the class from which many subclasses can be created. The subclasses inherit the characteristics of a superclass. The superclass is also known as the parent class or base class. In the above example, Vehicle is the Superclass and its subclasses are Car, Truck and Motorcycle.


1 Answers

Your idea to have a variable of type Animal is good. But you also have to make sure to use the right constructor:

Animal animal; // define a variable for whatever animal we will create  if (condition) {     Dog dog = new Dog(); // create a new Dog using the Dog constructor     dog.setD(..);     dog.setE(..);       animal = dog; // let both variables, animal and dog point to the new dog } else {     Cat cat = new Cat();      cat.setF(..);     cat.setG(..);     animal = cat; }  animal.setA(..); // modify either cat or dog using the animal methods animal.setB(..); animal.setC(..);  listAnimal.add(animal); 

Hint: If an Animal is always either Cat or Dog consider making Animal abstract. Then the compiler will automatically complain whenever you try to do new Animal().

like image 168
slartidan Avatar answered Sep 25 '22 00:09

slartidan