Ok! У меня есть тот же код, написанный в Java и С#, но результат отличается!
class A
{
public void print()
{
Console.WriteLine("Class A");
}
}
class B : A
{
public void print()
{
Console.WriteLine("Class B");
}
}
class Program
{
static void Main(string[] args)
{
A a = new B();
a.print();
Console.Read();
}
}
Выход: Класс A. Он находится на С#.
Но когда тот же код запускался в Java, результат был класса B. Вот код Java:
class A
{
public void print()
{
System.out.println("Class A");
}
}
class B extends A
{
public void print()
{
System.out.println("Class B");
}
}
public class Program{
public static void main(String []args){
A a = new B();
a.print();
}
}
Итак, почему это показывает разные результаты? Я знаю, что в Java все методы по умолчанию являются виртуальными, поэтому Java выводит класс B.
Другое дело, что оба языка утверждают, что они появились или вдохновлены С++, то почему они показывают разные результаты, в то время как оба имеют одинаковый базовый язык (Say).
И что делает эта строка A a = new B();
на самом деле? Является ли a объектом хранения класса B? Если это так, то почему С# отображает Класс A, а Java показывает Класс B?
ПРИМЕЧАНИЕ Этот вопрос задавался в интервью с тем же кодом, который был приведен выше. И я ответил с выходом класса B (по отношению к Java), но он сказал, что Класс A будет правильным выходом.
Спасибо!