As I know, according to "composition over inheritance" rule, we should avoid reusing a method by inheritance, but how about class members? Suppose I have parent and child classes like the following:
public class Animal{
protected String name;
protected int _id;
public String getName(){
return name;
}
public int getId(){
return _id;
}
}
public class Cat extends Animal{
}
public class Dog extends Animal{
}
and I found I am reusing "name" and "_id" field by inheritance. Should I put all attributes into a separate class and let a child class uses it by composition like this:
public class AnimalData{
public String name;
public int _id;
}
public interface Animal{
public AnimalData getAnimalData();
}
public class Cat implements Animal{
public AnimalData animalData;
public AnimalData getAnimalData(){
return animalData;
}
}
public class Dog implements Animal{
public AnimalData animalData;
public AnimalData getAnimalData(){
return animalData;
}
}
in order to obey "composition over inheritance" rule?
Cat
andDog
classes. Could you improve your example to better explain why you need extra classes?