class Employee { private String id; private String name; private double salary; public String toString() { return id + " " + name + " " + salary; } public Employee(String i, String n, double s) { id = i; name = n; salary = s; } } class Manager extends Employee { private double bonus; public String toString() { return super.toString() + " " + bonus; } public double getBonus() { return bonus; } public Manager(String i, String n, double s, double b) { super(i, n, s); bonus = b; } } class Main { public static void main(String[] args) { Manager m1 = new Manager("902", "Brian", 1000, 10); Employee e1 = m1; //upcasting Manager m; m = (Manager)e1; //downcasting System.out.println(m.getBonus()); } } /* class Main { public static void main(String[] args) { } } */ /* Manager m1 = new Manager("902", "Brian", 1000, 10); Employee e1 = m1; //upcasting Manager m; m = (Manager)e1; //downcasting System.out.println(m.getBonus()); */ /* public static void main(String[] args) { Employee e1 = new Employee("001", "Alice", 1000); Manager m1 = new Manager("902", "Brian", 1000, 10); show_info(m1); } private static void show_info(Employee x) { // some other details System.out.println(((Manager) x).getBonus()); } */ /* Employee[] allEmployees = new Employee[3]; allEmployees[0] = new Employee("001", "Alice", 1000); allEmployees[1] = new Manager("902", "Brian", 1000, 10); allEmployees[2] = new Manager("904", "Daisy", 1000, 15); for (Employee e : allEmployees) { Manager m = (Manager) e; System.out.println(m.getBonus()); // work only if e is really a manager; otherwise runtime error } */ /* if (e instanceof Manager) { Manager m = (Manager) e; System.out.println(m.getBonus()); // work only if e is really a manager; otherwise runtime error } */ /* Manager m1 = new Manager("902", "Brian", 1000, 10); System.out.println(m1 instanceof Employee); System.out.println(m1 instanceof Manager); */