abstract class Person { // these are abstract methods String name; abstract String color(); public abstract Long height(); public abstract Long weight(); // abstract class can have constructor public Person(String name) { System.out.println("Person constructor called"); this. name = name; } // this is a concrete method public String getName() { return name; } } class Person1 extends Person { String name; public Person1(String name) { // calling Person constructor super(name); System.out.println("Person1 constructor called"); this. name = name; } @Override String color() { System.out.println("Person1 colour is white"); } @Override public Long weight() { return 65L; } @Override public Long height() { return 165L; } } class Person2 extends Person{ String name; public Person2(String name) { // calling Person constructor super(name); System.out.println("Person2 constructor called"); this. name = name; } @Override public Long weight() { return 50L; } @Override public Long height() { return 150L; } public class Test { public static void main(String[] args) { Person p1 = new Person1("Ram"); Person p2 = new Person2("Shyam"); System.out.println(p1.toString()); System.out.println(p2.toString()); } } }