Java 面向对象——多态(上)
多态
一、概述: 某一个事物,在不同时刻表现出来的不同状态。多态是同一个行为具有多个不同表现形式或形态的能力。举例:水的不同状态(液体,固体,气态)。多态是同一个行为具有多个不同表现形式或形态的能力。
多态性是对象多种表现形式的体现。例如:
比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫、小狗、蜥蜴等等。那么我到宠物店说"请给我一只宠物",服务员给我小猫、小狗或者蜥蜴都可以,我们就说"宠物"这个对象就具备多态性。 比如你是一个酒神,对酒情有独钟。某日回家发现桌上有几个杯子里面都装了白色的酒,从外面看我们是不可能知道这是些什么酒,只有喝了之后才能够猜出来是何种酒。你一喝,这是剑南春、再喝这是五粮液、再喝这是酒鬼酒….在这里我们可以描述成如下:酒 a = 剑南春
酒 b = 五粮液
酒 c = 酒鬼酒
…
这里所表现的的就是多态。剑南春、五粮液、酒鬼酒都是酒的子类,我们只是通过酒这一个父类就能够引用不同的子类,这就是多态——我们只有在运行的时候才会知道引用变量所指向的具体实例对象。
二、多态存在的三个必要条件(多态的前提) 继承(有继承关系)重写(方法重写)父类引用指向子类对象class Fu {
public void show() {
System.out.println("show Fu");
}
}
class Zi extends Fu {
public void show() {
System.out.println("show Zi");
}
}
class DuoTaiDemo {
public static void main(String[] args) {
Fu f = new Zi(); 3.要有父类引用指向子类对象
}
}
三、 多态中的成员访问特点:
A:成员变量
编译看左边,运行看左边。
B:构造方法
创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
C:成员方法
编译看左边,运行看右边。
D:静态方法
编译看左边,运行看左边。
(静态和类相关,算不上重写,所以,访问还是左边的)
用代码演示如下:
1、构造方法
创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
class Fu {
public Fu(){}
public void show() {
System.out.println("show Fu");
}
}
class Zi extends Fu {
public void show() {
System.out.println("show Zi");
}
}
class DuoTaiDemo {
public static void main(String[] args) {
Fu f = new Zi(); 3.要有父类引用指向子类对象
}
}
2、成员变量:编译看左边,运行看左边。
class Fu {
public int num = 100;
public void show() {
System.out.println("show Fu");
}
}
class Zi extends Fu {
public int num = 1000;
public int num2 = 200;
public void show() {
System.out.println("show Zi");
}
}
class DuoTaiDemo {
public static void main(String[] args) {
Fu f = new Zi();
System.out.println(f.num2);
}
}
DuoTaiDemo.java:21: 错误: 找不到符号
System.out.println(f.num2);
^
符号: 变量 num2
位置: 类型为Fu的变量 f
1 个错误
3、成员方法
编译看左边,运行看右边。
class Fu {
public int num = 100;
public void show() {
System.out.println("show Fu");
}
}
class Zi extends Fu {
public int num = 1000;
public int num2 = 200;
public void show() {
System.out.println("show Zi");
}
public void method() {
System.out.println("method zi");
}
}
class DuoTaiDemo {
public static void main(String[] args) {
Fu f = new Zi();
System.out.println(f.num);
f.method();
}
}
DuoTaiDemo.java:27: 错误: 找不到符号
f.method();
^
符号: 方法 method()
位置: 类型为Fu的变量 f
1 个错误
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
由于成员方法存在方法重写,所以它运行看右边。
4、静态方法
编译看左边,运行看左边。 (静态和类相关,算不上重写,所以,访问还是左边的)
class Fu {
public int num = 100;
public static void function() {
System.out.println("function Fu");
}
}
class Zi extends Fu {
public int num = 1000;
public int num2 = 200;
public static void function() {
System.out.println("function Zi");
}
}
class DuoTaiDemo {
public static void main(String[] args) {
Fu f = new Zi();
System.out.println(f.num);
f.function();
}
}
100
function Fu
多态(下):https://blog.csdn.net/hewenqing1/article/details/103556668
相关知识
Java 面向对象——多态(上)
java 多态
Java笔记:多态polymorphic
python之面向对象
多态
Python———面向对象编程
多态应用
【Java学习记录】十二 Java中的多态
JAVA面向对象编程——学生喂养三种宠物:猫、狗和鸟
Object类、多态
网址: Java 面向对象——多态(上) https://www.mcbbbk.com/newsview221557.html
上一篇: 市民携带宠物进入公共场所和区域的 |
下一篇: 理解猫咪的心思:猫咪向你举起猫爪 |
推荐分享

- 1养玉米蛇的危害 28654
- 2狗交配为什么会锁住?从狗狗生 6922
- 3我的狗老公李淑敏33——如何 6215
- 4豆柴犬为什么不建议养?可爱的 4597
- 5南京宠物粮食薄荷饼宠物食品包 4549
- 6中国境内禁养的十大鸟种,你知 4418
- 7湖南隆飞尔动物药业有限公司宠 4247
- 8自制狗狗辅食:棉花面纱犬的美 4241
- 9家养水獭多少钱一只正常 4194
- 10广州哪里卖宠物猫狗的选择性多 4102