相关疑难解决方法(0)

在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");
  }
}
Run Code Online (Sandbox Code Playgroud)

java casting

174
推荐指数
4
解决办法
19万
查看次数

为什么在java中允许向下转换?

class Animal{
  public void findAnimal(){
    System.out.println("Animal class");
  }
  public void sayBye(){
    System.out.println("Good bye");
  }
}

class Dog extends Animal{
 public void findAnimal(){
  System.out.println("Dog class");
 }
}
Run Code Online (Sandbox Code Playgroud)

鉴于上述继承,可以理解Animal的参考可以指Dog的一个对象

Animal animal=new Dog();
Run Code Online (Sandbox Code Playgroud)

由于Dog对象可以执行动物可以执行的所有操作,如上面的情况,Dog也有sayBye和findAnimal方法.

但是为什么允许将一个Animal对象向下转换为Dog对象,该对象没有用处并且在运行时失败.

Dog dog=(Dog)new Animal(); // fails at runtime but complies.

Dog dog=(Dog)animal;
Run Code Online (Sandbox Code Playgroud)

上面的语句看起来很合理,因为动物引用指向Dog对象.

java inheritance

1
推荐指数
1
解决办法
946
查看次数

标签 统计

java ×2

casting ×1

inheritance ×1