Я понимаю, что абстрактный класс в парадигме ООП. Да, абстрактный класс является неполным, не может быть создан.
Подклассы абстрактного класса могут расширять суперкласс и т.д. и вызывать метод с использованием переменной базового типа. Но этого я не понимаю.
Я читал книгу, и автор сказал, используя переменную Superclass для ссылки на подкласс, и вызов общего метода вызывает правильный метод. И да, это правда. Например, этот небольшой код, который я написал:
public class ObjectOne extends SuperObject {
public String objectString()
{
return "objectString() of class ObjectOne\n" ;
}
}
public class ObjectTwo extends SuperObject {
public String objectString()
{
return "objectString() of class ObjectTwo\n" ;
}
}
public class ObjectThree extends SuperObject {
public String objectString()
{
return "objectString() of class ObjectThree\n" ;
}
}
public class SuperObject {
public String objectString()
{
return "SuperObject" ;
}
}
import static java.lang.System.out ;
public class ControlClass {
public static void main(String[] args)
{
SuperObject [] arr = {new ObjectOne(), new ObjectTwo(), new ObjectThree()} ;
for(SuperObject elem:arr)
{
out.println(elem.objectString()) ;
}
}
}
Em, поэтому, когда main выполняет правильные методы, вызывается для объектов, используя только ссылочный тип. Мой вопрос в том, какова точка абстрактного класса? Полиморфизм работает независимо от того, является ли метод или класс абстрактным. В отличие от С++, полиморфизм работает только тогда, когда вы его укажете. Для Java он работает, очевидно, постоянно.
Итак, я думаю, что абстрактное ключевое слово или абстрактная концепция - это просто завершить иерархию наследования, сделать неполные типы невозможными для создания экземпляров или способствовать хорошей практике ООП? Может кто-то разъяснить спасибо.