Загрузка данных


class Course { void method()   { System.out.println("Course::method()");  }   }
class BaseCourse extends Course {  void method()   { System.out.println("BaseCourse::method()");  }   }
class FreeCourse extends BaseCourse {   void method()   { System.out.println("FreeCourse::method()");  } }
class OptionalCourse extends Course {  void method()   { System.out.println("OptionalCourse::method()");  }}

public class Main {

    public static void doAction(Course course) {
        if (course instanceof BaseCourse) {
            // for BaseCourse and FreeCourse
            BaseCourse base = (BaseCourse) course;
            base.method();
        } else if (course instanceof OptionalCourse) {
            // for OptionalCourse
            OptionalCourse optional = (OptionalCourse) course;
            optional.method();
        } else {
            // for Course or null
        }
    }
    public static void main (String[] args){
        Course course = new BaseCourse();
        doAction(course);
    }
}