首页 > 分享 > Java 面向对象——多态(上)

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://m.mcbbbk.com/newsview221557.html

所属分类:萌宠日常
上一篇: 市民携带宠物进入公共场所和区域的
下一篇: 理解猫咪的心思:猫咪向你举起猫爪