you can write them all based on the same class if you want, but it really doesn’t matter, that’s just semantics. the way you organize your code should feel comfortable to you.
maybe the base class is an Item, and a sub class is quest item, which you can’t drop, and abilities can be a subclass of quest item that are invisible, and go in an different inventory pocket, and maybe have a different upgrade system tied to a skill tree.
maybe weapons could be a subclass of Item which can be equipped in a weapon slot, and RPG weapons could be a subclass of weapon that has randomized prefixes and suffixes and randomized stat modifiers.
but i don’t know enough about your game’s design to provide a hierarchy of classes. maybe you want to be able to loot items from dead people, or drag physical items around in the world, or collect items that cannot be dropped, or maybe you consider some items stolen or maybe you can only hold a certain weight of armor, but you can stack 99 potions in hammer space…
you will just end up reorganizing all of this as you playtest, so just get started, make it fun, make it balanced, and reorganize as you go.