您的位置:程序门 -> java -> j2se / 基础类



java 编程问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


java 编程问题
发表于:2007-10-18 18:49:52 楼主
有谁能帮我解决下面程序吗?
我对输出结果实在是不明白,输出结果是:1   2
那位看懂了的能不能帮我解释这行代码:   j_base   app=new   j_test();  


class   j_test   extends   j_base


{  
 
public       int   m_data=3;  
        public   string   mb_method()  
   
    {
        return   "2";
                                                        }  
public   static   void   main(string   args[])
   
    {  
 
  j_base   app=new   j_test();  
  system.out.println(app.m_data);
  system.out.println(app.mb_method());  
   
                                                        }  
                                                                                                }  

      class   j_base
       
        {  
                public   int     m_data=1;  
        public   string   mb_method()  

      {
      return   "3";
                                                        }  
                                                                                      }
发表于:2007-10-18 19:09:461楼 得分:0
j_base   app=new   j_test();    
父类变量对匿名子类对象的引用。
app.m_data此时,子类的public       int   m_data=3;还没有被执行。所以继承父类的m_data,值为1,
system.out.println(app.mb_method());因为子类覆盖了父类的mb_method()方法,而app是对子类对象的引用,还有多态的关系,所以他调用的是子类的mb_method()方法。这个时候m_data被赋值为2。
发表于:2007-10-18 19:11:022楼 得分:0
晕,最后一句错了m_data不是被赋值为2,而是mb_method()方法返回了一个字符串2。
发表于:2007-10-18 20:29:003楼 得分:0
java code
class j_test extends j_base //因为j_test 是j_base的子类, { public int m_data=3; public string mb_method() { return "2"; } public static void main(string args[]) { j_base app=new j_test(); /*所以可以用基类的变量引用子类的对象,这是java的一种称为多态的机制,你可以看一些相关的书籍或资料*/ system.out.println(app.m_data);/*这里有些麻烦,和java的命名有关,app虽然是子类,但可以看到与其同名的基类的成员,此时(子类当作基类用)它就将基类的同名成员输出了*/ system.out.println(app.mb_method()); /* 此时的方法的调用是更具对象的具体类型调用,app是j_test类,所以此处的mb_method()的方法是j_test类中的方法*/ } } class j_base { public int m_data=1; public string mb_method() { return "3"; } }
发表于:2007-10-18 21:37:004楼 得分:0
应该说是上转型的问题,转型后调用子类方法,父类变量
发表于:2007-10-18 22:29:125楼 得分:0
赞同4楼的简单的说法

《thinking   in   java   》书中说到这是“向上转型的问题”

如果   父类变量   指向   子类对象实例

那么调用父类的变量,调用子类的方法。
发表于:2007-10-19 21:12:136楼 得分:0
能不能给我一些准确的参考资料?
            我那知道你们是不是在忽悠我呢?
发表于:2007-10-19 21:14:047楼 得分:0
jf
发表于:2007-10-20 15:00:548楼 得分:0
类j_test继承了j_base,初始化时,将j_base   app初始化为他的一个子类型。
因为子类自动继承了父类的属性和方法,所以system.out.println(app.m_data);返回1。
而在子类中重写了父类方法public   string   mb_method();故system.out.println(app.mb_method());要执行子类的方法,而子类方法返回2,所以最终输出1和2。
发表于:2007-10-20 15:48:119楼 得分:0
首先是方法的重写,所以调用mb_method()时就是子类的方法了。
至于域是由于两个变量名称一样,所以当你的引用是哪个类型它就用那个类中的域,
其实你也可以在子类中使用父类中的域,只要你把其中一个域的名字改一下。


快速检索

最新资讯
热门点击