У меня есть 4 класса и 1 интерфейс
В интерфейс есть 2 абстрактных метода (myMethod (int k) и getV ())
public interface MyInterface
{ public abstract void myMethod(int k);
public abstract int getV();
}
В MySuperClass, который реализует MyInterface
public class MySuperClass implements MyInterface
{ private int v;
public MySuperClass() { this(2); }
public MySuperClass(int vValue) { v = vValue; }
public void myMethod(int k) { v += k; }
public void myMethod() { v--; }
public int getV() { return v; }
public String toString() { return Integer.toString(v); }
}
В MySubClass , расширяющий MySuperClass
public class MySubClass extends MySuperClass
{ private int v;
public MySubClass() { this(1); }
public MySubClass(int vValue) { v = vValue; }
public void myMethod(int k) { myMethod(); super.myMethod(k); }
public int getV() { return v; }
public String toString() { return super.toString() + " " + Integer.toString(v); }
}
MyOtherClass , реализующий MyInterface
public class MyOtherClass implements MyInterface
{ private int v;
public MyOtherClass() { this(0); }
public MyOtherClass(int vValue) { v = vValue; }
public void myMethod(int k) { v-= k; }
public void myMethod() { v++; }
public int getV() { return v; }
public String toString() { return Integer.toString(v); }
}
В основной класс
public class MyMain {
public static void main(String[] args) {
MyInterface[] mif
= {new MySuperClass(), new MyOtherClass(), new MySubClass()};
mif[mif[2].getV()].myMethod(1);
for (int i = 0; i < mif.length; i++) {
System.out.println(mif[i]);
}
mif[mif[0].getV()].myMethod(2);
for (int i = 0; i < mif.length; i++) {
System.out.println(mif[i]);
}}}
выход
2
-1
2 1
2
-1
31
Я не понимаю, строка 6 - 3 1 , почему бы не 4 0
Я думаю, что вывод равен 4 0, потому что
MIF [MIF [0] .getV ()] MyMethod (2).=> mif [2] .myMethod (2);=> MySubClass.myMethod (2);
и public void myMethod(int k) {myMethod(); super.myMethod(k); }
Я думаю, что «myMethod ()» меняет v на 1, поэтому v = 0, а super.myMethod (k) заменяет «v» на 2, поэтомуv = 4