黑马程序员技术交流社区

标题: 谁可以写出这个代码的输出? [打印本页]

作者: 郭炜    时间: 2012-3-12 03:52
标题: 谁可以写出这个代码的输出?
谁能写出如下代码的输出?并说明为什么。
public class Test {
public static void main(String[] args) {
Animal x = new Tiger();
System.out.println("(1)x.news is " + x.news);
System.out.println("(2)((Tiger)x).news is " + ((Tiger)x).news);
System.out.println("(3)x.smile() is " + x.smile());
System.out.println("(4)((Tiger)x).smile() is " + ((Tiger)x).smile());
System.out.println("(5)x.getNews() is " + x.getNews());
System.out.println("(5)x.getMessage() is " + x.getMessage());
}
}
class Animal {
public String news = "Animal's news";
public String message = "Animal's message";
public static String smile() {
return "smile from Animal";
}
public String getNews() {
return news;
}
public String getMessage() {
return message;
}
}
class Tiger extends Animal {
public String news = "Tiger's news";
public String message = "Tiger's message";
public static String smile() {
return "smile from Tiger";
}
public String getNews() {
return news;
}
}
作者: 潘许超    时间: 2012-3-12 04:48
这是输出结果:
(1)x.news is Animal's news
(2)((Tiger)x).news is Tiger's news
(3)x.smile() is smile from Animal
(4)((Tiger)x).smile() is smile from Tiger
(5)x.getNews() is Tiger's news
(5)x.getMessage() is Animal's message
下边有注释:
public class a {
public static void main(String[] args) {
Animal x = new Tiger();                                                                        //实例化一个Tiger
System.out.println("(1)x.news is " +this. x.news);                                //调用Animal的news
System.out.println("(2)((Tiger)x).news is " + ((Tiger)x).news);              //调用Tiger的news
System.out.println("(3)x.smile() is " + this.x.smile());                             //调用Animal的smile()
System.out.println("(4)((Tiger)x).smile() is " + ((Tiger)x).smile());          //调用Tiger的smile()
System.out.println("(5)x.getNews() is " + x.getNews());                        //调用Tiger的getNews(),因为Tiger继承了Animal中的所有方法,并且覆写所以调用的是Tiger的getNews()
System.out.println("(5)x.getMessage() is " + x.getMessage());//调用Animal的getMessage() 因为Tiger继承了Animal中的所有方法,但是没有覆写getMessage()所以调用Animal getMessage()
}
}
class Animal {
public String news = "Animal's news";                                              //声明news变量
public String message = "Animal's message";                                     //声明message变量
public static String smile() {
return "smile from Animal";
}
public String getNews() {                                                                   //getNews()方法
return news;
}
public String getMessage() {                                                             //getMessage()方法
return message;
}
}
class Tiger extends Animal {
public String news = "Tiger's news";                                                  //声明news变量
public String message = "Tiger's message";                                  //声明message变量


public static String smile() {
return "smile from Tiger";                                                               //smile() 方法
}
public String getNews() {
return news;                                                                                   //覆写getNews()方法
}
}
作者: 贠(yun)靖    时间: 2012-3-12 05:16
这是多太的调用这的知识,你要你要理解了静态和多台(上下转型)写出这个结果不难,我明天写,手机不好搞
作者: 魏昂    时间: 2012-3-12 09:41
嗯 是属于多态方面的,这个应该是属于向下类型转换的、即将父类型转化为子类型的。
作者: 泮和顺    时间: 2012-3-12 10:08
1"Animal's news"         
2"Tiger's news"
3"smile from Animal"  !!!!
4"smile from Tiger"
5"Tiger's news"
6 "Animal's message"典型的多态问题,把父类对象引用边指向 子类实例化对象。 本身就是多态的体现所以没有强制向回转型的情况都是调用父类的即1,3,5 强制转型的情况如2 4
另外关于方法覆盖了的话就调用覆盖的方法如6

作者: 王睿    时间: 2012-3-12 10:56
  1.                 Animal x = new Tiger();
  2.                 System.out.println("(1)x.news is " + x.news);
  3.                 //引用父类成员变量news
  4.                 System.out.println("(2)((Tiger)x).news is " + ((Tiger)x).news);
  5.                 //因为强转了,所以引用子类成员变量news
  6.                 System.out.println("(3)x.smile() is " + x.smile());
  7.                 //父类是静态的没有被复写,所以调用了父类的smile方法
  8.                 System.out.println("(4)((Tiger)x).smile() is " + ((Tiger)x).smile());
  9.                 //应为强转了,所以调用了子类的smile方法
  10.                 System.out.println("(5)x.getNews() is " + x.getNews());
  11.                 //子类复写了该方法,所以调用了子类的getNews方法
  12.                 System.out.println("(5)x.getMessage() is " + x.getMessage());
  13.                 //子类没有复写,调用父类的getMessage方法。
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2