dowith 2010-03-19 22:33
浏览 211
已采纳

一道高级java面试题

public class Shape {

private int i=10;
public Shape(){
    i = 20;
    print();
}
public Shape(int m){

    i = m;
    print();

}
public void print(){
    System.out.println("This shape=>"+i);
}

}

public class Circle extends Shape{

private int i = 20;

public void print(){
    System.out.println("this circle=>"+i);
}
public Circle(){
    this.i = 30;
    print();
    super.print();

}


public static void main(String[] args){
    Shape shap = new Circle();


}

}

请问输出什么结果呢?
为何第一输出的是this circle=>0??实在是搞不懂。

  • 写回答

4条回答 默认 最新

  • qwe_rt 2010-03-19 22:59
    关注

    new操作明确一点首先调用的是父类的构造方法:
    [quote]public Shape(){
    i = 20;
    print();
    }
    [/quote]
    在调用print()时,print被重写,去调用Circle的print()方法。

    [code="java"]public void print(){ //Circle
    System.out.println("this circle=>"+i);
    }
    [/code]
    Circle 的i还没被被赋值,在加载类的时候整型变量均被赋值为0。所以输出 “this circle=>0”
    '''''''''''如果你把shape里的print()方法改为private,

    '''''''因为没有被重写,不存在多态。这时调用的为父类Shape中的print方法。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)