A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



class F
{
        int a = 2;
        public static void show()
        {
               
                System.out.println("fulei");
        }
}

class Zi extends F
{
        int a = 95;
        public static  void show()
        {
               
                System.out.println("zilei");
        }
}

public class DuoTaiDemo {

        public static void main(String[] args) {
                F f = new Zi();
                f.show();
               
                System.out.println(f.a);
                System.out.println("------------");
               
                F f2 = new F();
                f.show();
                System.out.println(f.a);
                System.out.println("------------");
               
                Zi zi = new Zi();
                zi.show();
                System.out.println(zi.a);

        }

}
   
//静态方法存在重写,但依然表现父类的静态方法?

求指教?

9 个回复

倒序浏览
1.public class DuoTaiDemo {

        public static void main(String[] args) {
                F f = new Zi();
                f.show();
这里的f.show(),引用的是父类的办法,在毕老师的第100个视频中讲解中讲到
多态的弊端:
        提高了扩展性,但是只能使用父类的引用访问父类中的成员
所以一般父类方法,如果要覆盖一般都是abstract类,而不是static类.
在这里中,你的show()是static,随着父类的加载而存在内存,所以运行到f.show(),时,它就直接找到内存中父类.show()了.但这里的确存在加载,只是那个子类中show(),根本不用到的.
2.提醒一下
F f2 = new F();
                f.show();  //这里应该是f2,如果是为测试的话
                System.out.println(f.a);
                System.out.println("------------");
回复 使用道具 举报
不好意思,楼主.我越想越觉得我的回答不合理.
在多态中成员函数的特点:
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边.
因为你这里是静态的,所以都是参考的左边的父类的.
回复 使用道具 举报
IT老鹰 发表于 2015-7-31 14:16
不好意思,楼主.我越想越觉得我的回答不合理.
在多态中成员函数的特点:
在多态中,静态成员函数的特点:

你谦虚了,大牛
回复 使用道具 举报

我也只是初学者,只是乐意彼此交流,一起加油哈
回复 使用道具 举报
支持支持支持
回复 使用道具 举报
成员变量不重写,因为就近原则,成员方法同名会重写!
回复 使用道具 举报
静态归属于类,在多态中,对象都是表现为父类类型的,调用静态方法,当然是用父类的静态方法了
回复 使用道具 举报
静态调用直接用类名调用
回复 使用道具 举报
感谢各位大神,这个问题也困扰我很久了。。这里应该是算重写,不过调用时,在多态中,还是调用父类中的静态方法吧,不知道我这样理解有没有错?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马