Если переменные генерируются и не сохраняются в файл, вы не можете их перенести в источник
. Обманчиво простой способ сделать это:
некоторая команда | xargs
Правильно, вы не можете видеть это, потому что s
- это тип SuperClass
, который не имеет этого метода - это, очевидно, нарушит принцип Полиморфизм .
Поэтому вам нужно либо изменить код, как ((ChildClass) s).childClassMethod();
, либо сделать s
как ChildClass
.
Это потому, что суперкласс не имеет этого метода.
Если вы хотите, чтобы суперкласс мог вызвать метод, вам нужно сделать его абстрактным и дать ему этот метод.
Подкласс является формой суперкласса, суперкласс не является формой подкласса.
Компилятор не знает, какой экземпляр этой ссылки указывается во время выполнения, поэтому он позволит вам получить доступ к доступным методам суперкласса во время компиляции
См.
Родитель ничего не знает о каких-либо новых методах, которыми обладает ребенок.
public class SuperClass {
// I have no method named "childClassMethod"...
}
public class ChildClass {
public void childClassMethod() {
// Do something.
}
}
SuperClass
не знает о childClassMethod()
. Вам нужно будет предоставить оба класса с интерфейсом или добавить этот метод к родительскому элементу и переопределить его в дочернем элементе.
Или вы могли бы просто передать объект в дочерний класс, как предложили другие, но это может быть небезопасным.
((ChildClass) s).childClassMethod()