В Java разрешено использование масштабирования, но при этом downcasting дает ошибку компиляции.
Ошибка компиляции может быть удалена путем добавления приведения, но в любом случае будет нарушена во время выполнения.
В этом случае, почему Java допускает downcasting, если он не может быть выполнен во время выполнения? 
Есть ли практическое применение этой концепции?
public class demo {
  public static void main(String a[]) {
      B b = (B) new A(); // compiles with the cast, 
                         // but runtime exception - java.lang.ClassCastException
  }
}
class A {
  public void draw() {
    System.out.println("1");
  }
  public void draw1() {
    System.out.println("2");
  }
}
class B extends A {
  public void draw() {
    System.out.println("3");
  }
  public void draw2() {
    System.out.println("4");
  }
}
