回 帖 发 新 帖 刷新版面

主题:[讨论]关于多态的问题?请大虾指教

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;
请大虾分析原因!

回复列表 (共2个回复)

沙发

你把set和get方法里面“=”前面的变量加上this.试试……
    this.id = id;
    return this.id;

---------------------------
在内存中this.id和id是不一样的~~~
this.id表示类中的这个id变量~~而id是新生成的,由外部进来的临时生成的变量~~~
直接赋值id和返回id,系统是默认作用域最小的那个变量。。所以就没有类中的这个id,你传进去的是哪个id就是哪个id

板凳

首先main方法中实例化一个sub,则执行父类的构造方法而却不执行那些带参数的方法所以
 public Super(){
        System.out.println(id);
        setId(5);
        System.out.println(getId());
    }
中  setId(5);并未执行父类中id值也没改变先输出10 10
然后执行子类中的   System.out.println(id);这是输出的子类的id所以是20
而类中System.out.println(getId());调用了父类的getId();而此方法是输出父类中的id;
而父类的setid()在调用其构造方法时又没执行还是10故tem.out.println(getId());执行后输出20
所以最后输出10 10 20 10的结果。

我来回复

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