Не можете получить доступ к методам объекта? - PullRequest
1 голос
/ 18 апреля 2020

У меня есть небольшой пример, где у меня есть интерфейс, как показано ниже

public interface Chair {
    int getHeight();
    String getType();
    int getPrice();
}

И класс:

public class ExpensiveChair implements Chair {
    private int height;
    private int price;
    static private String type = "Expensive";

    public ExpensiveChair(int height, int price){
        this.height = height;
        this.price = price;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    @Override
    public int getHeight() {
        return this.height;
    }

    @Override
    public String getType() {
        return this.type;
    }

    @Override
    public int getPrice() {
        return this.price;
    }
}

Но если я сделаю что-то вроде

Chair chair = new ExpensiveChair(1, 2);

Я не могу позвонить

chair.setHeight(5)

Мне нужно сначала набрать его?

((ExpensiveChair) chair).setHeight(1);

Почему мне нужно привести его явно, или я не могу вызвать метод?

1 Ответ

1 голос
/ 18 апреля 2020

Когда вы создаете объект Chair chair, Java читает его как объект Chair, даже если позже вы назначите его ExpensiveChair. Таким образом, вы можете получить доступ только к методам в Chair. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *, Поэтому * * * * * * * * * * * * * * * * * * * * * * * * * *). ExpensiveChair «. Это потому, что во время выполнения он вызывает весь метод ExpensiveChair и вызывает ExpenisveChair метод getClass(). Но во время компиляции он читает его как Chair объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...