黑马程序员技术交流社区

标题: 关于多态中变量的问题 [打印本页]

作者: 黑马-李嘉欣    时间: 2013-3-13 11:57
标题: 关于多态中变量的问题
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.在多态中,实际存在着变量的覆盖关系吗?能说一下当中的运作过程就再好不过了。
谢谢~
作者: 冷叙辰    时间: 2013-3-13 12:31
1、static的用处就是声明是静态的,也就是在类加载时就可使用了,并不依赖于对象,去掉了就必须依赖于对象来使用。
一般使用静态变量是是这么用的。
  1. System.out.println(Fu.num);
复制代码
2、同名了就是子类是重写了父类的属性了
作者: 王洪宇    时间: 2013-3-15 20:24
属性不存在多态。声明时的引用是谁的,引用.属性就是谁的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2