Я не уверен, отвечает ли этот вопрос на ваш вопрос, но если вы говорите об абстрактных классах вообще, они там, чтобы обеспечить функциональность для дочернего класса, который расширяет его, если дочерний класс не должен знать или иметь дело со всеми детали реализации (он скрыт от пользователя дочернего класса).
Давайте возьмем машину, например:
public abstract class Vehicle {
protected int _numberOfWheels;
public Vehicle() {
this._numberOfWheels = 4;
}
}
public class Truck extends Vehicle {
public int carryingLoad;
public Truck() {
this.carryingLoad = 4000; // kg or something
}
}
Так автомобиль является абстрактным экземпляром объекта транспортного средства и уже имеет некоторые функциональные возможности, связанные с ним, например, количеством колес. Это защищенный метод, так что если я создаю новый экземпляр грузовика:
// Inside main
Truck truck = new Truck();
Я не могу изменить количество колес, тем не менее, если бы я написать функцию для грузовиков в классе, как:
// Inside the Truck class
public void addSpareTire() {
this._numberOfWheels++;
}
Так что я мог бы назвать это нравится:
// Inside main
truck.addSpareTire();
я все еще мог взаимодействовать с некоторыми переменными, но только кап функции в классе, который расширяет абстрактный класс. Я могу добавить одну шину в то время, позвонив по телефону addSpareTire()
, но я никогда не мог взаимодействовать непосредственно с _numberOfWheels
от основной функции, где я с помощью на Truck
объект, но я могу изнутри Truck
класса декларации. Из пользователя объекта грузового автомобиля эта информация скрыта.
Я не знаю, это то, о чем вы просите. Надеюсь это поможет.
Он не скрывает от вас, но от клиента. –
Клиент? Но что ему не нравится в коде? –
Вы говорите об абстрактных классах вообще? интерфейсы? полиморфизм? – 1N5818