编译时多态:方法重载
方法重载是一种编译时多态的形式,它指的是在一个类中定义了多个同名的方法,但它们的参数列表不同。在使用这些方法时,编译器会根据调用的参数类型和数量来选择合适的方法,并将方法调用转换为对应的方法名和参数列表。例如:
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calculator = new Calculator();
System.out.println(calculator.add(1, 2)); // 调用add(int, int)方法
System.out.println(calculator.add(1.0, 2.0)); // 调用add(double, double)方法
}
}
在上面的例子中,Calculator类定义了两个同名的add方法,但它们的参数类型不同。当使用这些方法时,编译器会根据参数类型来选择合适的方法。
运行时多态:方法重写
方法重写是一种运行时多态的形式,它指的是当子类重新定义了父类的方法时,对该方法的调用会被转换为子类的方法。在方法调用时,虚拟机会根据实际对象的类型来选择对应的方法。例如:
public class Animal {
public void speak() {
System.out.println("I am an animal!");
}
}
public class Dog extends Animal {
public void speak() {
System.out.println("I am a dog!");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Dog();
animal.speak(); // 调用Dog类中的speak()方法
}
}
在上面的例子中,Animal类定义了speak方法,而Dog类重新定义了该方法。当我们创建一个Dog对象并将它赋值给一个Animal类型的变量时,对speak方法的调用会被转换为Dog类中的speak方法,而不是Animal类中的speak方法。
强制类型转换:类型转换
类型转换是一种强制多态的形式,它指的是将一个对象从一个类转换为另一个类。在进行类型转换时,需要使用强制类型转换运算符进行转换。例如:
public class Animal {
public void eat() {
System.out.println("I am eating!");
}
}
public class Dog extends Animal {
public void bark() {
System.out.println("I am barking!");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Dog();
animal.eat(); // 调用Animal类中的eat()方法
((Dog) animal).bark(); // 将Animal类型的对象转换为Dog类型,调用Dog类中的bark()方法
}
}
在上面的例子中,我们创建了一个Dog对象并将其赋值给一个Animal类型的变量。当调用eat方法时,虚拟机会根据实际对象的类型来选择Animal类中的eat方法。而当我们将Animal类型的对象强制转换成Dog类型后,调用bark方法时,虚拟机会选择Dog类中的bark方法。
本文来自投稿,不代表亲测学习网立场,如若转载,请注明出处:https://www.qince.net/java4sjava.html
郑重声明:
本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
我们不承担任何技术及版权问题,且不对任何资源负法律责任。
如遇到资源无法下载,请点击这里失效报错。失效报错提交后记得查看你的留言信息,24小时之内反馈信息。
如有侵犯您的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!