学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

请高手帮我看看一个继承的问题

请高手帮我看看一个继承的问题

public class A {
    String s="[a]";
    String gets()
    {return s;}
    
    

}



public class B extends A
{
    String s="[b]";
    String gets() {return s;}
    

}




public class ploytest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO 自动生成方法存根
        A a=new A();
        B b=new B();
        a.s="[aa]";
        b.s="[bb]";
        a=b;
        
        System.out.println(a.s);
        System.out.println(b.s);
        
        System.out.println(a.gets());
        System.out.println(b.gets());
        
        ((A)b).s="[aa]";
        System.out.println(a.s);
        System.out.println(b.s);
        System.out.println(a.gets());
        System.out.println(b.gets());
       
        

    }
    

}

为什么结果是这样:
[a]
[bb]
[bb]
[bb]
[aa]
[bb]
[bb]
[bb]
请帮分析一下吧,谢谢了

TOP

继承的问题

A a=new A();//a对象的属性s="[a]"
B b=new B();//b对象的属性s="[b]",同时它也继承A类的属性s="[a]"
a.s="[aa]";//将a对象的属性s赋值为"[aa]"
b.s="[bb]";//b对象的属性s赋值为"[bb]"
a=b;//将b对象的地址赋给a,a中存放的是b对象的地址,这时等同于指针,同时
    它也拥有b对象的所有属性.既b对象的属性s="[bb]",和b对象继承A类的属
    性s="[a]"
System.out.println(a.s);//因为a对象指向b象,a.s调用的是b对象中继承A类
    的属性s="[a]"
System.out.println(b.s);//b.s调用的是b对象本身类(B类)中的s="[bb]"
        
System.out.println(a.gets());
System.out.println(b.gets());//因为a对象指向b对象,这两条语句的效果是
    一样的都是调用的B类中的gets()方法,返回的是本类中的s属性值为"[bb]"

        
((A)b).s="[aa]";//同上面一样,这里只是改变了B类继承A类的s="[a]"的值改
    为了"[aa]",而本类里的s="[bb]"的属性值没有改变
System.out.println(a.s); //下面的运行方式和上面的是一样的,就不用多说了
System.out.println(b.s);
System.out.println(a.gets());
System.out.println(b.gets());
其实你如果把两个s的名称换成不一样的很容易看出来的!

TOP

发新话题