Если я использую суперкласс для инициализации объекта подкласса, почему объект будет иметь атрибуты подкласса и только методы суперкласса?

Я хотел бы понять, почему это происходит именно так и какая польза от преимущества следующего явления: я использую суперкласс для инициализации объекта подкласса, почему объект будет иметь атрибуты подкласса и методы суперкласса?

Посмотрите код, чтобы понять, что я на самом деле имею в виду:

class SuperClass {
public String s = "'This is the superclass'";
public String method() {
return s;
    }
}
class SubClass extends SuperClass {
public String s = "'This is the subclass'";
public String method() {
return s;
    }
}

public class SubClassTest {
public static void main(String[] args) {
SuperClass sc = new SuperClass();
System.out.println("Superclass s:  " + sc.s + " bzw. method: " + sc.method());
SubClass subc = new SubClass();
System.out.println("SubClass s:  " + subc.s + " bzw. method: " + subc.method());
SuperClass x = subc;
System.out.println("x s: " + x.s + " bzw. method: " + x.method());
    }
}

Вывод следующий:

Superclass s:  'This is the superclass' bzw. method: 'This is the superclass'
SubClass s:  'This is the subclass' bzw. method: 'This is the subclass'
x s: 'This is the superclass' bzw. method: 'This is the subclass'

person ArminB    schedule 21.03.2018    source источник


Ответы (1)


Как говорит Рамкумар, эта ссылка может вам помочь

вы не можете переопределить структуру класса, который уже определен, вы можете переопределить поведение. Переменные класса не полиморфны по своей природе.

person Tushar Deshpande    schedule 21.03.2018