Java下播

Java中允许升级,但是下播会导致编译错误。

编译错误可以通过添加强制转换来删除,但无论如何在运行时会中断。

在这种情况下,如果不能在运行时执行Java为什么允许下播?
这个概念有什么实际用途吗?

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

Java下播

aluckdog
浏览 359回答 3
3回答

哆啦的时光机

如果有可能在运行时成功,则允许下行广播:Object o = getSomeObject(),String s = (String) o; // this is allowed because o could reference a String在某些情况下,这种做法不会成功:Object o = new Object();String s = (String) o; // this will fail at runtime, because o doesn't reference a String在其他情况下,它将发挥作用:Object o = "a String";String s = (String) o; // this will work, since o references a String当强制转换(例如最后一次)在运行时失败时,ClassCastException会被扔出去。请注意,某些强制转换在编译时将被禁止,因为它们永远不会成功:Integer i = getSomeInteger();String s = (String) i; // the compiler will not allow this, since i can never reference a String.

泛舟湖上清波郎朗

使用您的例子,您可以:public void doit(A a) {     if(a instanceof B) {         // needs to cast to B to access draw2 which isn't present in A         // note that this is probably not a good OO-design, but that would         // be out-of-scope for this discussion :)         ((B)a).draw2();     }     a.draw();}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java