本文目录一览:
- 1、最近在看JAVA多态的时候,才知道JAVA有方法调用的优先级。
- 2、谁能跟我说几个JAVA多态,在现实生活中应用的例子,不要说代码和概念,就只说案例
- 3、java中,方法的多态性是什么意思?
- 4、Java多态里,虚拟方法.为什么父类会调用子类方法
- 5、java 中实现多态的机制是什么?
- 6、JAVA多态调用
最近在看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里面多态一般指的是运行时多态,重载多态是通过方法签名实现的,同一个方法名,但是要求参数必须不一样,这个在编译期间就可以确定调用的是哪个方法。