У меня есть 3 класса A, B и c следующим образом
A.java
class A
{
protected A(){
System.out.println("A");
}
void show()
{
System.out.println("showA");
}
}
B.java
class B extends A
{
B(){
System.out.println("B");
}
void show()
{
System.out.println("showB");
}
}
C.java
class C extends B
{
C(){
System.out.println("C");
}
void show()
{
System.out.println("showC");
}
public static void main(String... args)
{
A a= (B)new C();
a.show();
}
}
При выполнении выдает вывод
D:\java\rmi\Hello>javac C.java
D:\java\rmi\Hello>java C
A
B
C
showC
Я знаю, что суперкласс не может быть приведен к подклассу. Но в выводе почему он выполняет метод класса C (show), когда происходит приведение к суперклассу B?
A a= (B)new C();
И если это правильно, то что забрасывается в В?
Я имею в виду, что new C () будет вызывать конструктор C и, следовательно, соответствующие выходы, но
в чем разница между new C().show();
и (B)new C().show();
что здесь кастуется?