У меня есть два заданных классов А и В. В наследует от А.назначения объекта унаследованного класса до супер объект класса
В настоящее время в основном методе класса М есть экземпляр г из A , которые указывают на объект B.
Я знаю, что методы подкласса остаются, если объект унаследованного класса назначен суперклассу.
Вопрос: Так почему же для z.(-6)
метод f(double y)
из B используется и не f(int y)
? Или другими словами: Можете ли вы объяснить, почему вывод дает -8.0 и 4.0?
public class A {
public int x = 2;
public A() {
this.x+++;
}
public A(int x) {
this.x += x;
}
public void f(double x) {
this.x = (int) (x + B.y);
}
}
public class B extends A {
public static double y = 3;
public double x = 0;
public B(double x) {
y++;
}
public void f(int y) {
this.x = y * 2;
B.y = 0;
}
public void f(double y) {
this.x = 2 * y + B.y;
}
}
public class M {
public static void main(String[] args) {
A a = new A((int) B.y);
System.out.println(a.x); // OUT: [5]
B b = new B(2);
System.out.println(b.x + " " + B.y); // OUT: [0.0] [4.0]
A z = b;
System.out.println(z.x); // OUT: [3]
z.f(-0.5);
System.out.println(b.x + " " + z.x); // OUT: [-6.0] [3]
z.f(-6);
System.out.println(b.x + " " + B.y); // OUT: [-8.0] [4.0]
}
}
Поскольку 'A' не имеет' F (интермедиат х) '. Также используйте значащие имена переменных и методов. –
Статический тип 'z' -' A', в котором нет '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' этого метода в классе «B». –