【济南中心】JAVA编程阶梯:基础篇之第九章

面向对象之多态
多态(polymorphic)概述:事物存在的多种形态 
体现:父类的引用或者接口的引用指向了自己的子类对象。
多态前提:
    * a:要有继承关系。
    * b:要有方法重写。
    * c:要有父类引用指向子类对象。
[Java] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
class Fu {
        public void show() {
                System.out.println("fu show");
        }
}
 
class Zi extends Fu {
        public void show() {
                System.out.println("zi show");
        }
}
 
class Demo {
        public static void main(String[] args) {
                Fu f = new Zi();// 父类的引用或者接口的引用指向了自己的子类对象
        }
}

多态中的成员访问特点
成员变量:
      当子父类中出现同名的成员变量时。
      编译时期:参考的是引用型变量所属的类中是否有被调用的成员变量。没有,编译失败。
      运行时期:也是调用引用型变量所属的类中的成员变量。
      简单记:编译和运行都参考等号的左边。
成员函数:
     编译时期:参考左边,如果没有,编译失败。
     运行时期:参考右边的对象所属的类。
     编译看左边,运行看右边。
     对于成员函数是动态绑定到对象上。
静态函数。
    静态函数是静态的绑定到类上。
    编译和运行都参考左边。
【结论】
        对于成员变量和静态函数,编译和运行都看左边。
        对于成员函数,编译看左边,运行看右边。
[Java] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27java接口有没有构造方法
28
29
30
31
class Fu {
        int num = 10;
 
        public void show() {
                System.out.println("fu show" + num);
        }
}
 
class Zi extends Fu {
        int num = 20;
        int m = 30;
 
        public void show() {
                System.out.println("zi show " + num);
        }
 
        public void method() {
                System.out.println("zi method");
        }
}
 
class Demo {
        public static void main(String[] args) {
                Fu f = new Zi();
                // f.method(); 成员方法编译看左边,父类中没有,所以编译失败
                f.show();// 运行看右边。
                // int sum = f.m; //成员变量编译和运行都参考等号的左边,父类中没有编译失败
                int sum = f.num;
                System.out.println(sum);// 成员变量编译和运行都参考等号的左边,所以是父类中的成员变量
        }
}
抽象函数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。