Ich habe diese Schnittstelle und Klassen:Interface, abstract class und inherhering subclass mit gleicher Methode, die unterschiedliche type argumente bekommt, welche benutzt wird?
public interface AlternateLight {
public String change(long time);
}
public abstract class AbstractLight {
public String change(int time) {
return "AbstractLight Method was used";
}
}
public class DistinctAlternateLight extends AbstractLight implements AlternateLight {
public String change(long time) {
return "DistinctAlternateLight Method was used";
}
}
Jetzt nenne ich die Methode ändern() mit folgenden Haupt-Methode:
public class WhatUsedTest {
public static void main(String[] args) {
AlternateLight al = new DistinctAlternateLight();
System.out.println(al.change(100));
}
}
Es druckt "DistinctAlternateLight Methode verwendet wurde", aber warum? Ich dachte, da ich kein "L" hinter das 100 als Argument gesetzt habe, würde es die Methode der abstrakten Klasse nennen, weil ihre Methode ganze Zahlen annimmt. Mit dem Fehlen von "L" vermutete ich, dass der Compiler die 100 nicht als Long-Wert behandeln und die Methode Longs aufrufen würde, aber das tut es. Warum ist das so?