域的隐藏和方法的覆盖

class Parent {
    int x = 10;
    public void print() {
        System.out.println("Parent's print method");
    }
}
class Child extends Parent {
    int x = 20;
    public void print() {
        System.out.println("Child's print method");
    }
}
class aaa{
public static void main(String[] args) {
       Parent p = new Child();/*Chlid中有Parent的域?因为子类只是隐藏?*/
       System.out.println(p.x);
       p.print();//p是从Child那赋值来的,print方法已经被覆盖
               if (p instanceof Child) {
        ((Child) p).print2();
        }
       /*在代码p.print2();中会出现错误,原因在于变量p的类型是Parent。
       虽然它实际指向的对象是Child类型(通过new Child()创建的),
       但在编译阶段,编译器只会根据变量声明的类型(也就是Parent类型)来检查能够调用的方法。
       由于Parent类中并没有定义print2这个方法,所以编译器认为通过p调用print2是不合法的操作,
       从而报错。如果想要调用print2方法,需要先将p进行向下转型(前提是确定实际对象是Child类型)*/
}
}
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务