Une classe abstraite Java n'a pas besoin d'implémenter toutes les méthodes de mise en œuvre de l'interface. Pourquoi?

Regardons le simple bout de code suivant dans Java.

interface Sum
{
    abstract public void showSum();
}

interface Mul
{
    abstract public void showMul();
}

abstract class Super implements Sum
{
    protected int x;
    protected int y;

    public Super(int x, int y)
    {
        this.x=x;
        this.y=y;
    }

    //No error, though the method showSum() of the implementing iterface Sum is commented. Why?

    /*public void showSum()
    {
        System.out.println("Sum = "+(x+y));
    }*/
}

final class Calculation extends Super implements Mul
{
    public Calculation(int x, int y)
    {
        super(x,y);
    }

    public void showSum()
    {
        System.out.println("Summation = "+(x+y));
    }

    //If showMul() is commented , it would issue a compile-time error. Why?
    public void showMul()
    {
        System.out.println("Multiplication = "+(x*y));
    }   
}

final public class Main
{
    public static void main(String[] args) throws IOException
    {
        Scanner s=new Scanner(System.in);

        System.out.print("\nEnter a number : ");
        int x=s.nextInt();

        System.out.print("\nEnter another number : ");
        int y=s.nextInt();

        Calculation c=new Calculation(x,y);
        c.showSum();
        c.showMul();
    }
}

Depuis l'interface Somme ne contenant qu'une seule méthode showSum(); est mis en œuvre par la classe abstraite Super , il devrait être nécessaire pour la classe abstraite Super à mettre en œuvre que la méthode showSum();. Le compilateur ne se plaignent pas du tout, et le programme fonctionne bien avec aucun problème du tout. Pourquoi?


De même, la non-abstraite, finale de la classe Calcul est la mise en œuvre de la Mul interface et contient la mise en œuvre effective de la méthode showMul(); présenté dans la mise en œuvre de l'interface. Dans le cas, si cette méthode showMul() dans la classe Calcul est commenté, il génère une erreur de compilation. Pourquoi la même chose n'est pas applicable à cette classe abstraite Super?

OriginalL'auteur Bhavesh | 2011-11-06