当前位置: 技术问答>java相关
父类什么情况下可以转化成子类?
来源: 互联网 发布时间:2015-03-02
本文导语: 我在把父类转化成子类时,总是抛出异常,但是我在书上看到父类是可以转化成子类的,请问是什么情况? | 就是如果父类的那实例是由字类的实例上溯造型的,就可以。 如: A 是B的父...
我在把父类转化成子类时,总是抛出异常,但是我在书上看到父类是可以转化成子类的,请问是什么情况?
|
就是如果父类的那实例是由字类的实例上溯造型的,就可以。
如:
A 是B的父类。
A a= new B();
就可以:
B b= (B)a;
如:
A 是B的父类。
A a= new B();
就可以:
B b= (B)a;
|
看看抛出的是什么异常,是空指针,说明你的句柄没有指向一个对象。如果是类型错误,那你转换错误,父类变成子类,必须是那个对象确实是这个子类才可以。
|
class Shape {
void draw() {}
void erase() {}
}
class Circle extends Shape {
void draw() {
System.out.println("Circle.draw()");
}
void erase() {
System.out.println("Circle.erase()");
}
}
class Square extends Shape {
void draw() {
System.out.println("Square.draw()");
}
void erase() {
System.out.println("Square.erase()");
}
}
class Triangle extends Shape {
void draw() {
System.out.println("Triangle.draw()");
}
void erase() {
System.out.println("Triangle.erase()");
}
}
public class Shapes {
public static Shape randShape() {
switch((int)(Math.random() * 3)) {
default: // To quiet the compiler
case 0: return new Circle();
case 1: return new Square();
case 2: return new Triangle();
}
}
public static void main(String[] args) {
Shape[] s = new Shape[9];
// Fill up the array with shapes:
for(int i = 0; i
void draw() {}
void erase() {}
}
class Circle extends Shape {
void draw() {
System.out.println("Circle.draw()");
}
void erase() {
System.out.println("Circle.erase()");
}
}
class Square extends Shape {
void draw() {
System.out.println("Square.draw()");
}
void erase() {
System.out.println("Square.erase()");
}
}
class Triangle extends Shape {
void draw() {
System.out.println("Triangle.draw()");
}
void erase() {
System.out.println("Triangle.erase()");
}
}
public class Shapes {
public static Shape randShape() {
switch((int)(Math.random() * 3)) {
default: // To quiet the compiler
case 0: return new Circle();
case 1: return new Square();
case 2: return new Triangle();
}
}
public static void main(String[] args) {
Shape[] s = new Shape[9];
// Fill up the array with shapes:
for(int i = 0; i