Using Generics :
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class tryitout {
    public static void main(String[] args) {
        ClassA a = new ClassA("sap",11);
        ClassB<ClassA> b = new ClassB<ClassA>(a);
        b.print();
    }
}
public class ClassA {
    private String name;
    private int id;
    public ClassA(String name, int id) {
        super();
        this.name = name;
        this.id = id;
    }
    @Override
    public String toString() {
        return "ClassA [name=" + name + ", id=" + id + "]";
    }
}
public class ClassB<T> {
    private T genericObj;
    public ClassB(T genericObj){
        this.genericObj = genericObj;
    }
    public void print() {
        Field nameField = getField("name");
        Field idField = getField("id");
        try {
            System.out.println(nameField.get(genericObj));
            System.out.println(idField.getInt(genericObj));
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    private Field getField(String FieldName) {
        Field fld = null;
        try {
            fld = genericObj.getClass().getDeclaredField(FieldName);
            if(Modifier.isPrivate(fld.getModifiers())) {
                fld.setAccessible(true);//To get access over private fields
            } 
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        }
        return fld;
    }
}
using generics you can access method also.
I don't know your exact purpose,otherwise other classes can extend any particular Abstract class and you can use that Abstract class as a type inside classB.
public class TypeClass {
    protected String name;
    protected int id;
    protected void paint(){
        System.out.println("name: " + name + " | id: " + id);
    } 
}
public class ClassC extends TypeClass{
    public ClassC(String name, int id) {
        super();
        this.name = name;
        this.id = id;
    }
    @Override
    public String toString() {
        return "ClassA [name=" + name + ", id=" + id + "]";
    }
}
package javaConcept.generics;
public class ClassD {
  private TypeClass typeClass;
  public ClassD(TypeClass typeClass) {
      this.typeClass = typeClass;
  }
  public void newPaint() {
      typeClass.paint();
  }
}
public class TempoClass {
    public static void main(String[] args) {
        ClassC c = new ClassC("sap",11);
        ClassD b = new ClassD(c);
        b.newPaint();
    }
}