Java - это ОО-язык, и он работает с классами и объектами. Заманчивое, наивное решение состояло бы в том, чтобы ваша программа работала с «классами» fish, как будто она работает с классами чего-либо, то есть для создания некоторого кода Java и предоставления компилятору и загрузчику возможности вводить его в среду выполнения.
Этот подход можно заставить работать, с некоторой неловкостью. По сути, ваше кодирование «динамических классов Java», вероятно, в конечном итоге окажется намного больше и сложнее, чем фактически предполагает ваше назначение.
Вам действительно нужно делать это, только если у вас действительно будут разные атрибуты (не просто разные значения этих атрибутов) для вашей рыбы; и даже тогда есть более простые решения.
Для того, что спрашивают, я думаю, что вам действительно нужен только один Fish
класс. Когда пользователь определяет новый, он действительно определяет значения атрибутов.
Если вам действительно нужны новые и динамические атрибуты, то вы могли бы пройти долгий путь, используя, например, HashMap
для хранения пар имя / значение. Вы можете позволить пользователю добавить "legs" / "4"
, а затем распечатать этот новый атрибут как есть; но вы не могли заставить рыбу ходить по этим ногам, потому что вам не хватало бы кода для работы с новым атрибутом.