周二 多态

发布时间 2023-07-11 16:07:16作者: 菜鸟de博客

多态引用可以随时引用不同类型的对象

使用继承实现多态

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(); // 输出:喵喵喵!
}
}