多态引用可以随时引用不同类型的对象
使用继承实现多态
import java.lang.*;class average {
public double sum=0;
public void natures(){
System.out.println("average");
}
public double averages(double ... list){
if(list.length!=0){
for(double i:list)
sum+=i;
}
return sum/list.length;
}
}
class nature extends average{
private double aa;
public void natures(){
System.out.println("nature");
}
}
public class Main {
public static void main(String[] args) {
average h=new nature();
h.natures();
average m=new average();
m.natures();
}
} 运行结果
"D:\java jdk\bin\java.exe" "-javaagent:D:\IntelliJ IDEA 2023.1\lib\idea_rt.jar=57969:D:\IntelliJ IDEA 2023.1\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\Users\Lenovo\IdeaProjects\wzy\out\production\wzy Main
nature
average
进程已结束,退出代码0
一开始我的编译出错因为
而在多态的情况下,可以调用子类中覆盖了父类的方法,并且不能直接调用子类特有的方法。因此,在你的代码中,h
引用的是average
类型,因此无法直接调用natures()
方法,因为该方法是子类nature
特有的。
利用接口实现多态
继承也可应用于接口
两个关键字 Interface implements
效果与继承实现多态相仿 如
interface Animal {void makeSound();
}
// 实现接口的两个类
class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("汪汪汪!");
}
}
class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("喵喵喵!");
}
}
public class Main {
public static void main(String[] args) {
// 创建接口类型的引用并赋值为具体实现类的实例
Animal animal1 = new Dog();
Animal animal2 = new Cat();
// 调用相同的接口方法,表现出不同的行为
animal1.makeSound(); // 输出:汪汪汪!
animal2.makeSound(); // 输出:喵喵喵!
}
}
标签:makeSound,average,多态,class,public,周二,void From: https://www.cnblogs.com/zeyangshuaige/p/17544996.html