重写、重载⽅法的调⽤import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* 1.重载⽅法调⽤是在编译时决定的
* 2.重写的⽅法调⽤是在运⾏时决定的
*/
public class Test2 {
public void classify(Set<?> s) {
System.out.println("set");
}
public void classify(List<?> s) {
System.out.println("list");
}
public void classify(Collection<?> s) {
System.out.println("unknown");
java重写和重载的区别}
public static void main(String[] args) {
// 重载⽅法是在编译时决定的,所以编译时类型都是Collection,即调⽤的是第三个⽅法
Collection<?>[] c = { new HashMap<String, String>().values(),
new ArrayList<String>(), new HashSet<String>() };
for (Collection<?> collection : c) {
new Test2().classify(collection);
}
// 重写的⽅法调⽤是在运⾏时决定的,编译时都是Wine,但是在运⾏时
Wine[] wines = { new Wine(), new Sparkling(), new Champagne() };
for (Wine wine : wines) {
wine.name();
}
}
}
class Wine {
void name() {
System.out.println("wine");
}
}
class Sparkling extends Wine {
void name() {
System.out.println("Sparkling");
}
}
class Champagne extends Wine {
void name() {
System.out.println("Champagne");
}
}
运⾏结果:
unknown
unknown
unknown
wine
Sparkling
Champagne
1.重载⽅法调⽤是在编译时决定的
2.重写的⽅法调⽤是在运⾏时决定的
解决上⾯重载和要预期的结果不同的问题:将重载的⽅法合并成为⼀个
public static void classify(Collection<?> s) {
if(s instanceof Set<?>){
System.out.println("set");
}else if(s instanceof List<?>){
System.out.println("list");
}else{
System.out.println("unknown");        }
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。