回 帖 发 新 帖 刷新版面

主题:不能解决的问题

class Super{
    public int id=10;
     public void setId(int id){
           id=id; }

        public int getId(){
          return id; }

    public Super(){
        System.out.println(id);
        setId(5);
        System.out.println(getId());
    }}

class Sub extends Super{

    public int id=20;   

     public void setId(int id){

           id=id;}

public Sub(){

        System.out.println(id);

        setId(15);

        System.out.println(getId());

}}
public class Main{

    public static void main(String[] args){
        Super s=new Sub();
     }

}
我读程序之后的结果是:10,5,20,15;
可在计算机上运行的结果是:10,10,20,10;
这是不是Bug啊我分析了半天都觉得不对

回复列表 (共2个回复)

沙发

你的运行结果应该是10,10,20,15
在public Super()中调用的setId()实际上是子类Sub的setId(),这是由于继承覆盖造成的

板凳

/**
 * <pre>
 * Copyright:        Copyright(C) 2008, javaxx.com
 * Class:            Sub
 * Date:            Jan 10, 2009 10:14:10 PM
 * Author:            <a href="mailto:wembaster@javaxx.com">wulliam</a> 
 *
 * </pre>
 **/
package com.javaxx.exmple;

/**
 * @author wulliam
 * @since Jan 10, 2009 10:14:10 PM
 */




public class Main {
    
    class Super {
        public int id = 10;

        public void setId(int id) {
            this.id = id;
            out("Super setid " + id);
        }

        public int getId() {
            out("Super getId " + id);
            return id;
        }

        public Super() {
            out("Super1 " + id);
            this.setId(5);
            out("Super2 " + this.getId());
        }
    }

    class Sub extends Super {

        public int id = 20;

        public void setId(int id) {
            out("Sub setId " + id);
            this.id = id;
        }

        public Sub() {

            out("sub1 " + id);

            this.setId(15);

            out("sub2 " + this.getId());

        }
    }
    
    public Main() {
        Super s = new Sub();
    }
    
    public static void out(Object o) {
        System.out.println(o);
    }
    

    public static void main(String[] args) {
        Main main = new Main();
    }

}

代码梢作修改,看一下LOG就知道程序怎么调用的.

我来回复

您尚未登录,请登录后再回复。点此登录或注册