Java - Невозможно вызвать методы абстрактного класса, расширяющие супер неабстрактный класс. - PullRequest
0 голосов
/ 02 марта 2020

суперкласс, называемый phone (неабстрактный), затем 1 абстрактный класс, который расширяет его, называется «developer1», затем последний конкретный класс, называемый «developer2», который расширяет абстрактный «developer1». Проблема в том, что меня попросили создать экземпляр с помощью Phone (суперкласс) и получить доступ ко всему через последний класс. Я не получаю ошибок, но я не вижу и не могу получить доступ ни к каким методам любого другого класса, кроме суперкласса.

class Phone {
    private String brand;

    public Phone(){
        this.brand="samsung";
    }
    public void show(){
        System.out.println("current phone");
    }
}

abstract class DeveloperOne extends Phone{

    public DeveloperOne() {
        super();
    }

    public void newRingtone(){
        System.out.println("new ringtone developed");
    }

    abstract void phoneTv();
}

class DeveloperTwo extends DeveloperOne {

    @Override
    public void phoneTv() {
        System.out.println("phone tv developed");
    }
}

class Main {
    public static void main(String[] args) {
        PhoneParent phone = new DeveloperTwo();    //this dynamic binding is required
    }
}

Проблема здесь, я не могу увидеть или получить доступ ни к каким методам классов developerOne ИЛИ DeveloperTwo, я могу только видеть и получать доступ к материалам с телефона (супер класс). Как я могу это исправить?

1 Ответ

0 голосов
/ 02 марта 2020
class Main {
    public static void main(String[] args) {
           PhoneParent phone = new DeveloperTwo();  //this dynamic binding is required
 }

Нет класса с именем PhoneParent. Я предполагаю, что это опечатка. Вы должны создать его как DeveloperTwo.

DeveloperTwo phone = new DeveloperTwo();

В противном случае все, что вы увидите, это Phone методы класса.

Вы также можете сделать это.

Phone phone = new DeveloperTwo();
DeveloperTwo devel = (DeveloperTwo) phone; // casting

Затем используйте экземпляр devel для доступа к методам.

...