假设类X是类Y的父类,下列声明对象x的语句中不正确的是( )。
A.X x=new X();
B.X x=new Y();
C.Y x=new Y();
D.Y x=new X();
答案:D
向下转型操作本身是有前提条件的,必须发生向上转型后才可以发生向下转型。
各个选项的代码实现:
A
class X{
public void fun(){
System.out.println("666");
}
}
class Y extends X{
public void fun(){
System.out.println("2333");
}
}
public class Test1_1_5_1 {
public static void main(String args[]){
X x=new X(); //实例化父类对象
x.fun();
}
}
//结果
//666
B
class X{
public void fun(){
System.out.println("666");
}
}
class Y extends X{
public void fun(){
System.out.println("2333");
}
}
public class Test1_1_5_1 {
public static void main(String args[]){
X x=new Y(); //实例化子类对象,对象向上转型
x.fun();
}
}
//结果
//666
C
class X{
public void fun(){
System.out.println("666");
}
}
class Y extends X{
public void fun(){
System.out.println("2333");
}
}
public class Test1_1_5_1 {
public static void main(String args[]){
Y x=new Y(); //实例化子类对象
x.fun();
}
}
//结果
//2333
D
class X{
public void fun(){
System.out.println("666");
}
}
class Y extends X{
public void fun(){
System.out.println("2333");
}
}
public class Test1_1_5_1 {
public static void main(String args[]){
//向下转型操作本身是有前提条件的,必须发生向上转型后才可以发生向下转型。
Y x=new X(); //实例化父类对象,向下转型
}
}
//结果
//Error:(25, 13) java: 不兼容的类型: X无法转换为Y