多态是同一个行为具有多个不同表现形式或形态的能力。
多态性是对象多种表现形式的体现。例如:
比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫、小狗、蜥蜴等等。那么我到宠物店说"请给我一只宠物",服务员给我小猫、小狗或者蜥蜴都可以,我们就说"宠物"这个对象就具备多态性。 比如你是一个酒神,对酒情有独钟。某日回家发现桌上有几个杯子里面都装了白色的酒,从外面看我们是不可能知道这是些什么酒,只有喝了之后才能够猜出来是何种酒。你一喝,这是剑南春、再喝这是五粮液、再喝这是酒鬼酒….在这里我们可以描述成如下:酒 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
相关知识
Java 面向对象——多态(上)
java 多态
Java笔记:多态polymorphic
python之面向对象
多态
Python———面向对象编程
多态应用
【Java学习记录】十二 Java中的多态
JAVA面向对象编程——学生喂养三种宠物:猫、狗和鸟
Object类、多态
网址: Java 面向对象——多态(上) https://m.mcbbbk.com/newsview221557.html
上一篇: 市民携带宠物进入公共场所和区域的 |
下一篇: 理解猫咪的心思:猫咪向你举起猫爪 |