абстрактный класс, использующий собственный абстрактный метод - PullRequest
0 голосов
/ 13 июня 2018

Я недавно начал читать об абстрактном классе.Большую часть сайта я посетил, и я вижу, что родительский класс является абстрактным, а дочерний класс определяет этот абстрактный метод родительского класса.Это хорошо для меня, но недавно я увидел другой способ использования абстрактного класса.Код работает, но я не мог понять логику.Код подобен приведенному ниже


    abstract class TestParent
    {
      abstract void display();

       public void accessdisplay()
       {
         display();
       }
    }    //  TestParent

    public class TestChild extends TestParent
    {
       void display()
       {
          System.out.println("child define display");
       }

       void print()
       {
          System.out.println("This is print");
       }

       public static void main(String... arg)
       {
          TestChild t_child=new TestChild();

          t_child.accessdisplay();  
          t_child.print();
          System.out.println("\n******************************************\n");

          TestParent t_parent= new TestChild();

          t_parent.accessdisplay();  
          t_parent.display();  
          //t_parent.print();
       }    
    }


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

как работает код "t_parent.accessdisplay () "работает?я знаю, что TestChild ссылается на TestParent .... поэтому TestChild может получить доступ к методу родительского класса .... но display () является абстрактным методом .. он определен в дочернем классе ... как может объект "t_parent"который является ссылкой на родительский класс, может получить доступ к методу, определенному в дочернем классе

или есть что-то, что я хочу знать об абстрактном классе .... где отсутствует IAM

пожалуйста, помогите мне

1 Ответ

0 голосов
/ 05 июля 2018

Это из-за концепции ОО, называемой Полиморфизм .

"t_chiled" и "t_parent" являются ссылочными переменными объекта. Они сами не являются объектами. Думайте о них как о пультах дистанционного управления (телевизионные пульты).Каждый метод сопоставляется с кнопкой на пульте дистанционного управления.А поскольку дочерние классы наследуют методы от родительских классов, дочерний объект может реагировать на все кнопки родительского пульта дистанционного управления. Следовательно, дочерний объект может быть заменен там, где требуется родительский объект.

Здесь, в этом коде,

TestParent t_parent= new TestChild();

Ссылочная переменная родительского объекта (t_parent) ссылаетсяобъекту TestChild, который создается в куче.Он не ссылается на объект TestParent.Поэтому это не относится к абстрактному методу, когда

t_parent.accessdisplay();

это происходит.Он просто ссылается на переопределенный метод внутри объекта TestChild.

Для получения дополнительной информации о полиморфизме в Java посетите https://www.tutorialspoint.com/java/java_polymorphism.htm

...