2011-12-28 4 views
3

Так что у меня немного проблема с настройкой свойств в сценарии суперкласса.Настройка свойств суперкласса для подкласса

У меня есть 2 классов таким образом, что класс B является специализированной версией класса А, скажем ...

public class A { 
    private String name; 
    private int id; 
    ... 
} 

public class B extends A { 
    private Date time; 
    private int status; 
    ... 
} 

Теперь то, что я пытаюсь сделать, это использовать метод, который используется для установки свойств в а из результирующего набора, но вместо того, чтобы установить их в экземпляре B.

public A setProperties(ResultSet rs) { 
    A a = new A(); 
    a.setName(rs.getString(...)); 
    ... 
    return a; 
} 

Я попытался с возвращения из этого и приведения его в качестве B, но, конечно, не всех а являются B в ... так что это не сработает. Я также попытался добавить еще один параметр к методу setProperties, чтобы он взял A и вернул A. Таким образом, я могу использовать полиморфизм, чтобы вернуть свой B, но тогда все мои значения были исключены.

Я в затруднении здесь, любые рекомендации приветствуются.

ответ

6

Объявление метода в суперклассе. Подкласс переопределяет этот метод, а затем вызывает super.foo(ResultSet rs), где foo(...) - переопределенный метод. В этом случае вы можете разобрать ResultSet и установить поля объекта.

Пример -

class Foo{ 
    void setProperties(final ResultSet rs){ 
     // do stuff 
    } 
} 

final class Bar extends Foo{ 
    @Override 
    final void setProperties(final ResultSet rs){ 
     // do stuff 
     super.setProperties(rs); 
    } 
} 

Для получения дополнительной информации см Using the Keyword super.

+0

Мне придётся попробовать. Если я не переопределяю метод в подклассе, он все равно должен работать, чтобы установить свойства суперкласса, правильно? – Shaded

+0

Справа. Если вы явно не переопределяете 'setProperties' в подклассе, но все же вызываете его в экземпляре подкласса, свойства будут установлены в суперклассе. – mre

+0

У меня все еще есть проблема, я проверяю имя в 'A.setProperties()', и он выглядит нормально. После возврата метода я снова проверю его в 'B.setProperties()' и он равен нулю. Есть предположения? – Shaded

Смежные вопросы