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);
}
}