黑马程序员技术交流社区

标题: 多态中成员访问特点是什么啊?有点难理解 [打印本页]

作者: Andyhuai    时间: 2016-3-21 23:39
标题: 多态中成员访问特点是什么啊?有点难理解
多态中成员访问特点是什么啊?有点难理解
多态的概念好多,不是很好理解!!{:2_31:}{:2_38:}

作者: 余某某    时间: 2016-3-21 23:39

成员变量
编译看左边(父类),运行看左边(父类)
成员方法
编译看左边(父类),运行看右边(子类)。

静态方法
编译看左边(父类),运行看左边(父类)。
(静态和类相关,算不上重写,所以,访问还是左边的)
只有非静态的成员方法,编译看左边,运行看右边
作者: Gqg    时间: 2016-3-21 23:44
多态中的成员访问特点之成员变量)
* 成员变量
        * 编译看左边(父类),运行看左边(父类)。
/*
成员变量
编译看左边(父类),运行看左边(父类)
成员方法
编译看左边(父类),运行看右边(子类)。动态绑定
静态方法
编译看左边(父类),运行看左边(父类)。
(静态和类相关,算不上重写,所以,访问还是左边的)
只有非静态的成员方法,编译看左边,运行看右边
*/
案例:
class Demo2_Polymorphic {
        public static void main(String[] args) {
                Father f = new Son();                                        //父类引用指向子类对象
                System.out.println(f.num);                        //相当于是Father.method()
      Son s = new Son();
      System.out.println(s.num);
        }
}
class Father {
        int num = 10;       
}
class Son extends Father {
        int num = 20;
}

(多态中的成员访问特点之成员方法)
* 成员方法
        * 编译看左边(父类),运行看右边(子类)。
案例:
class Demo2_Polymorphic {
        public static void main(String[] args) {
                Father f = new Son();
                f.print();                                                        //相当于是Father.method()
        }
}
class Father {
        int num = 10;
        public void print() {
                System.out.println("father");
        }
}
class Son extends Father {
        int num = 20;
        public void print() {
                System.out.println("son");
        }
}


(多态中的成员访问特点之静态成员方法)
* 静态方法
        * 编译看左边(父类),运行看左边(父类)。
        * (静态和类相关,算不上重写,所以,访问还是左边的)
        * 只有非静态的成员方法,编译看左边,运行看右边
案例:
class Demo2_Polymorphic {
        public static void main(String[] args) {
                Father f = new Son();               
                f.method();                                                        //相当于是Father.method()
        }
}
class Father {
        int num = 10;
        public static void method() {
                System.out.println("father static method");
        }
}
class Son extends Father {
        int num = 20;
        public static void method() {
                System.out.println("son static method");
        }
}

作者: a13979214809    时间: 2016-3-22 00:38
其实不必想那么多看左边看右边,比如 fu f=new zi();是父类控制子类的对象实现父类中已有的东西,一切照着父类写就行了。至于实现方法反过来了?很简单啊,你这么理解,因为子类把方法重写了,重写了嘛  所以调用方法就用重写后的   这样比死背左边右边容易理解多了
作者: wangshoukai    时间: 2016-3-22 15:56
多态简单说就是因为子类重写了父类的方法,所以执行的时候会执行被修改以后的。
作者: 菜逼    时间: 2016-3-23 00:37
看了各位大神的回复,感觉更蒙了........
作者: 278008379    时间: 2016-3-23 12:29
大家说的都很好
作者: yc01    时间: 2016-3-23 16:07
现在理解不了 ,就先记着结果,学的多了有空,在看前面的 ,估计能理解了.读书千遍,其义自现嘛{:2_36:}
作者: dbymzss    时间: 2016-3-25 23:18
多态是父类引用子类对象;编译都看父类,,,运行时只有非静态成员方法看子类....
作者: Ak-47    时间: 2016-3-26 02:08
这个要理解啊
作者: dong19910527    时间: 2016-3-28 12:59
记住就行 等过一段回头一看就明白了




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