不可以! 刚写了个例子,楼主可以看看 class Foo{ public int a =3; static public void addOne(){ System.out.println("f"); } public void addFive(){ a+=5; System.out.println("f"); } } class Bar extends Foo{ public int a =8; static public void addOne(){ System.out.println("b"); } public void addFive(){ this.a += 5; System.out.println("b"); } } public class Pass { public static void main(String[] args) { Foo f =new Bar(); //Bar b=(Bar)new Foo(); //Error f.addOne(); f.addFive(); System.out.println(f.a); System.out.println(((Bar)f).a);
} } /* Output: * f * b * 3 * 13 */
不可以那样的,昨天刚看有人问(B)new A();为什么报类型转换的错误。 java中一般写成A a = new B();的比较多,这是多态的体现...
为什么不这样写呢?
B b = new B();
A类是父类
B类是继承自A类的子类
根据is-a的原则,任何父类出现的地方都可以用子类替换
上面的写法已经违反了这种原则...
会出BUG的...
A b=new B();这样就可以的
刚写了个例子,楼主可以看看 class Foo{
public int a =3;
static public void addOne(){
System.out.println("f");
}
public void addFive(){
a+=5;
System.out.println("f");
}
}
class Bar extends Foo{
public int a =8;
static public void addOne(){
System.out.println("b");
}
public void addFive(){
this.a += 5;
System.out.println("b");
}
}
public class Pass { public static void main(String[] args) {
Foo f =new Bar();
//Bar b=(Bar)new Foo(); //Error
f.addOne();
f.addFive();
System.out.println(f.a);
System.out.println(((Bar)f).a);
}
}
/* Output:
* f
* b
* 3
* 13
*/
java中一般写成A a = new B();的比较多,这是多态的体现...
B b=new A(); 正解