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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-李嘉欣 高级黑马   /  2013-3-13 11:57  /  1948 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Fu
{        
        static int num=3;
        void method1()
        {
                System.out.println("fu method_1");
        }
        void method2()
        {
                System.out.println("fu method_2");
        }
        static void method4()
        {
                System.out.println("fu method_4");
        }
}
class Zi extends Fu

{        static int num=66;//"China";
        void method1()
        {
                System.out.println("zi method_1");
        }
        void method3()
        {
                System.out.println("fu method_3");
        }
        static void method4()
        {
                System.out.println("zi method_4");
        }
}
class DuoTaiDemo4
{
        public static void main(String[] args)
        {
                Fu f=new Zi();
                f.method1();//结果是zi method_1,因为父类中method1被覆盖。
                f.method2();//fu method_2,因为子类继承了父类的method2方法。
                //f.method3();编译失败,父类引用不能调用子类特有方法,
                //因为此时子类对象在编译时并没有创建
/*注意*/                f.method4();//结果fu method_4,因为static函数在类加载时就已经存在
                                                        //而不需要对象,即不参考右边的子类对象,和子类没关系。
                System.out.println(f.NUM);
        }
}
关于多态模式,子父类变量的提问:
1.父类中变量static修饰符起到了什么作用?去掉的话,不影响结果,为什么还要带着?
2.在多态中,实际存在着变量的覆盖关系吗?能说一下当中的运作过程就再好不过了。
谢谢~

3 个回复

倒序浏览
1、static的用处就是声明是静态的,也就是在类加载时就可使用了,并不依赖于对象,去掉了就必须依赖于对象来使用。
一般使用静态变量是是这么用的。
  1. System.out.println(Fu.num);
复制代码
2、同名了就是子类是重写了父类的属性了
回复 使用道具 举报
属性不存在多态。声明时的引用是谁的,引用.属性就是谁的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马