首页 > 编程知识 正文

java多态之方法调用(JAVA用何种方式实现多态)

时间:2023-12-17 12:25:52 阅读:316447 作者:OIWU

本文目录一览:

最近在看JAVA多态的时候,才知道JAVA有方法调用的优先级。

这个和多态无关,和继承有关

Java编译器会先检查当前类有没有实现同名方法,如果有,执行当前类的方法;若没有,则去执行父类的同名方法;若父类没有,则再检查父类的父类有没有实现这个方法,以此类推

谁能跟我说几个JAVA多态,在现实生活中应用的例子,不要说代码和概念,就只说案例

有一个比较经典的多态实例:

有一个Animal类,它有Cat,和Dog两个子类,在Animal中有个say方法,当Cat调用这个方法的时候输出的是“小猫喵喵喵”,当Dog调用这个方法时,输出的是“小狗汪汪汪”,这就是Java多态的实现。

1、定义一种动物,该类型的动物有叫的属性。

2、分别定义猫,狗,鸟,都继承于该动物,都有叫的属性。

3、分别表示出各个具体小动物的叫声,例如猫的叫声:喵、狗的叫声:汪、鸟的叫声:咻,点是叫声,实现各个具体小动物用的叫声的方法是用的同一个函数名称,就是动物的叫声函数。

多态:

这个案例网上是没有的,属于无忌独创,当时在帮孩子辅导作业,小学科学,里面有一点内容是关于人的牙齿,说牙齿分为:门齿、犬齿、臼齿。

问闺女,为什么这么分呢?闺女说牙齿虽然都是用来咬食物,但是食物种类很多,咬碎需要的工具也不一样,门齿用来切割食物,如:苹果、梨;犬齿用来撕碎食物。

如肉类;臼齿用来磨碎食物,如犬齿撕碎的肉类,就需要再用臼齿来磨碎,然后送到食道,胃,小肠,大肠进行消化。我恍然大悟,这不就是Java面向对象里的多态吗?多完美啊。

这也很好说明了为什么会有多态出现,因为生活中就存在太多这种例子,所以需要多态来匹配解决。

java中,方法的多态性是什么意思?

嗨 你好

多态性:顾名思义就是拥有“多种形态”的含义,是指属性或方法在子类中表现为多种形态。它包括两种类型:

静态多态性:包括变量的隐藏、方法的重载(指同一个类中,方法名相同[方便记忆],但是方法的参数类型、个数、次序不同,本质上是多个不同的方法);

动态多态性:是指子类在继承父类(或实现接口)时重写了父类(或接口)的方法,程序中用父类(或接口)引用去指向子类的具体实例,从代码形式上看是父类(或接口)引用去调用父类(接口)的方法,但是在实际运行时,JVM能够根据父类(或接口)引用所指的具体子类,去调用对应子类的方法,从而表现为不同子类对象有多种不同的形态。不过,程序代码在编译时还不能确定调用的哪一个类的方法,只有在运行时才能确定,故又称为运行时的多态性。

希望给你带来帮助

祝你学习愉快

Java多态里,虚拟方法.为什么父类会调用子类方法

那个是多态,把子类当作父类来用 InputStream is = new FileInputStream(file);,于是父类的一个引用被赋给了一个子类的实例。这样看起来是父类调用了一个继承自父类的方法。

java多态存在的三个必要条件:

1.需要有继承关系的存在

2.需要有方法的重写

3.需要有父类的引用指向子类对象

希望对你有帮助。

java 中实现多态的机制是什么?

多态就是指一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。

因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。

扩展资料:

特点:

指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。

若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)。

参考资料来源:百度百科-多态

JAVA多态调用

别的地方看到的:

举个例子,显示鸟的飞行动作

对于八哥鸟,你可以这样new Myna().fly();

对于鹦鹉,你可以这样new Parrot().fly();

对于孔雀,你可以这样 new Peacock().fly();

。。。

对于每一个具体的鸟,你都必须调用具体的鸟类对象。

现在使用多态再来看看。

我们先写一个Bird类,用来抽取出鸟类的飞行动作。

public abstract class Bird {

public void fly() {

System.out.println("default bird fly!");

}

}

再写具体的鸟类,继承Bird类

class Parrot extends Bird {

@Override

public void fly() {

System.out.println("Parrot fly");

}

}

class Myna extends Bird {

@Override

public void fly() {

System.out.println("Myna fly");

}

}

现在再来看一下八哥和鹦鹉的飞行动作。

public static void main(String args[]) {

Bird bird = new Parrot();

bird.fly();

bird = new Myna();

bird.fly();

}

这样,同一个Bird的实例对象实际对调用的是八哥和鹦鹉的飞行动作。

假如这样还不清楚。那么现在有一个flyPerform()方法,显示具体的鸟的飞行行为。

flyPerform(Bird bird){

bird.fly();

}

那么你就可以这样

flyPerform(new Parrot());

flyPerform(new Myna());

假如现在又有了一种新的鸟,NewBird那么我们只需要将new NewBird作为参数传入flyPerform方法即可,而不需要去修改这个方法的代码。

这是一个比较粗糙的例子,要不你仔细琢磨看看?

对于这个推荐答案,我不是很认同,

在java里面多态一般指的是运行时多态,重载多态是通过方法签名实现的,同一个方法名,但是要求参数必须不一样,这个在编译期间就可以确定调用的是哪个方法。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。