J'ai une classe de base "Shapes" et une classe étendue "Circle". Les deux ont une méthode getName. Ma classe de test est la classe "Driver".Problème de résolution de portée ascendante Java
Je transmets un objet Cercle à Formes et le passe à une fonction appelée polyTest. Dans cette fonction, je veux appeler getName mais je ne veux pas que l'implémentation des objets circle de get name soit déclenchée mais que l'implémentation des classes de base soit déclenchée.
super.getName() ne fonctionne pas.
Mon code est ci-dessous.
public class Driver{
public static String polyTest (Shapes s){
return s.getName();
/*Instead of s.getName()... (gives me the Circle class implementation of getName())
I want to call s.Shapes::GetName, the base class implementation of getName. */
}
public static void main(String[] args){
Circle c = new Circle();
//Test Basic inheritance & basic polymorphism.
//System.out.print(c.getName());
//Upcast test.
Shapes s = (Shapes) c;
System.out.print(polyTest(s));
}
}
public class Circle extends Shapes{
Circle(){
super();
}
public String getName(){
return "I am a Circle";
}
}
public abstract class Shapes{
Shapes(){
}
public String getName(){
return "I am a Shape";
}
}
On dirait que quelque chose ne va pas dans la conception. BTW, vous n'avez pas besoin d'upcast à «Formes». Qu'est-ce que tu veux faire? – khachik