Я считаю, что большинство людей больше знакомы с двумя вещами «наследства» и «комбинации» на Java. Эта статья в основном обсуждает эти две темы. Если я напишу что -то не так, или это по -детски, а аргумент не ясен, все могут оставить сообщение, чтобы исправить меня.
Предположим, есть 2 класса: A и B :
extends B, то мы говорим, что A Fendits B, A - это подкласс, а B - родительский класс, и этот случай наследство.Вспомните, какие обстоятельства мы обычно рассматриваем эти две вещи? Я подумал об этом кратко, и часто есть следующие сценарии:
abstract class или interface извлекается Подумав об этом, кажется, что на самом деле есть только эти две ситуации, но эти две ситуации имеют особые отношения. Например, общедоступный код может быть достигнут abstract class и interface (метод по умолчанию в Java 8).
Ну, после того, как я скажу так много чушь, я просто брошу свою точку зрения. Добро пожаловать в:
abstract class или interface Более распространенный пример: в реальных проектах мы часто определяем POJO или model , и эти модели часто имеют некоторые атрибуты с одним и тем же существительным и типом, например:
// db table primary keyprivate int id; Это очень часто, но я встретил много коллег в моей реальной работе. Система определяет класс с именем BaseModel или RootModel , помещает в него приведенный выше id атрибута, а затем все модели во всем проекте наследуют этот класс BaseModdel. Интересно, встречали ли вы когда -нибудь таких коллег? Каковы преимущества и недостатки, как это?
Давайте сначала поговорим о преимуществах. Если вам нужно сказать, какие преимущества он может принести, вы не видите никаких существенных преимуществ, за исключением набора клавиатуры несколько раз и пропустить эти атрибуты в подклассе. Тем не менее, это вызвало очень неприятные вещи для последующего обслуживания проекта.
Тогда давайте поговорим о потенциальных проблемах этого письма:
Однажды, по некоторым причинам, вы хотите найти, где использовать
idатрибута в подклассе (наследуя базодель) в проекте
Вы умны и умело используются, find usages в IDE, и тогда вы обнаружите, что вы нашли много мест использования, и многие из них не являются тем, о чем вы заботитесь вообще. Но нет никакого способа, вы также искали местоположение идентификатора свойства других классов, которые наследуют BaseModel. Если проект не является большим, у вас может быть меньше профилей. Что если проект немного больше? Когда вы получите более 50 знаний в поиске, что вы будете делать дальше?
Как избежать этой ситуации? То есть не используйте подобные BaseModel , чтобы использовать наследование атрибутов. Конечно, ради строгого периода мне все еще нужно подробно объяснить это значение. Я не полностью выступаю против наследования атрибута. Давайте уточним:
Что я возражаю, так это то, что все модели всего проекта наследуют базоделью, а затем поместите общие свойства в BaseModel
Эта идея состоит в том, чтобы отметить, что это для всего проекта
Лично я часто встречаю примеры негативных учебников выше, поэтому я буду говорить о них отдельно. Я не уверен, произошло ли это в ваших проектах. Во всяком случае, меня много раз обманули мои коллеги.
Что касается других распространенных ошибок, связанных с «комбинацией» и «наследством», я еще не думал об этом (по крайней мере, я думаю, что никто не сможет это сделать). Если я думаю, что это ясно в будущем, или если у читателей есть другие предложения, я надеюсь, что вы сможете оставить сообщение для общения.