java基础之理解多态
2023-12-29 09:40:50
目录
简单理解
简单理解就是,同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
说人话就是,对于一个父类,有个类继承它对吧,我可以重写父类的方法对吧,我可这样重写对吧,又有一个类,也能继承它对吧,也能重写父类的方法对吧,那样重写对吧,这俩类都继承了一个父类,都重写了父类的方法,但是重写的内容不同,这叫多态;同理,有个父接口,两个类对父接口的实现不同,不也是多态。
满足多态的三个条件
如果按照这个概念来定义的话,那么多态应该是一种运行期的状态。为了实现运行期的多态,或者说是动态绑定,需要满足三个条件:
有类继承或者接口实现
子类要重写父类的方法
父类的引用指向子类的对象。
代码示例
// 父类 Animal
class Animal {
public void makeSound() {
System.out.println("动物发出声音");
}
}
// 子类 Dog 继承自 Animal
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("狗发出汪汪的声音");
}
}
// 子类 Cat 继承自 Animal
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("猫发出喵喵的声音");
}
}
public class PolymorphismExample {
public static void main(String[] args) {
Animal animal1 = new Dog(); // 使用父类引用指向子类对象
Animal animal2 = new Cat(); // 使用父类引用指向另一个子类对象
animal1.makeSound(); // 调用的是子类 Dog 的 makeSound() 方法
animal2.makeSound(); // 调用的是子类 Cat 的 makeSound() 方法
//父类引用指向不同的子类对象,展现出多种不同的姿态。
}
}
在代码中同样是动物的发出叫声的操作,在狗子身上就是? “汪汪汪”,在猫身上就是 “喵喵喵”(同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果)
前面说多态是一种运行期的概念。还有一种说法,包括维基百科也说明,认为多态还分为动态多态和静态多态。
?
动态多态
是指在运行时确定对象的具体类型,并根据对象的类型调用相应的方法。Java中的方法重写就是一种动态多态,因为在运行时,虚拟机会根据对象的实际类型来调用相应的方法。
静态多态
是指在编译时确定函数或方法的具体调用,这种多态性也被称为重载(overloading)。Java中的方法重载就是一种静态多态,因为在编译时就能够确定调用的方法。
个人观点
我认为,多态应该是一种运行期特性,Java中的重写是多态的体现。不过也有人提出重载是一种静态多态的想法,这个问题在StackOverflow等网站上有很多人讨论,但是并没有什么定论。我更加倾向于重载不是多态。
文章来源:https://blog.csdn.net/qq_62262918/article/details/135281345
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!