Как получить доступ к методу дочернего класса, используя родительский класс? - PullRequest
0 голосов
/ 09 января 2020

Я получаю ошибку при доступе к методу дочернего класса, используя переменную родительского класса. Пожалуйста, помогите мне.

Как я могу получить доступ к этому методу?

class Parent 
{
    public void show()
    {
        System.out.println("Show method in Parent class");
    }
}
class Child extends Parent
{
    public void print()
    {
        System.out.println("Print method in Child class");
    }
}
public class Downcast
{
    public static void main(String args[])
    {
        Parent p1=new Child();
        p1.print();//showing error here
    }
}

Ответы [ 3 ]

1 голос
/ 09 января 2020

Ваш класс Parent ничего не знает о методах в вашем классе Child. Вот почему вы получаете ошибку.

Одно из возможных решений - сделать ваш класс Parent абстрактным и добавить в него абстрактный метод print(), но в этом случае все подклассы должны переопределять этот метод:

abstract class Parent {

    public void show() {
        System.out.println("Show method in Parent class");
    }

    public abstract void print();
}

class Child extends Parent {

    @Override
    public void print() {
        System.out.println("Print method in Child class");
    }

}

public class Downcast {

    public static void main(String[] args) {
        Parent p1 = new Child();
        p1.print();
    }

}
0 голосов
/ 09 января 2020

Ошибка вызвана тем, что класс Parent ничего не знает о классе Child. Один из способов исправить ошибку - выполнить явное приведение ((Child) p1).print();

0 голосов
/ 09 января 2020

Вы можете сделать приведение:

class Parent 
{
    public void show()
    {
        System.out.println("Show method in Parent class");
    }
}
class Child extends Parent
{
    public void print()
    {
        System.out.println("Print method in Child class");
    }
}
public class Downcast
{
    public static void main(String args[])
    {
        Parent p1=new Child();
        ((Child) p1).print();// Out : Print method in Child class
    }
}
...