Change Base C++ class variable to subclassed BP type

Lets say I have the following C++ classes:

  1. Item.cs derived from Actor. - (UCLASS(Blueprintable, BlueprintType))
  2. ItemComponent.cs derived from ActorComponent. - (UCLASS(Blueprintable, editinlinenew, BlueprintType, ClassGroup = (Custom), meta = (DisplayName = “ItemComponent”, BlueprintSpawnableComponent)))

And the following BP classes:

  1. BP_Item that subclasses Item.
  2. BP_ItemComponent that subclasses ItemComponent.

In item.cs I declare a pointer to an ItemComponent object like so:

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = “Items”)

class UItemComponent* ItemComponentPtr;

If I drag Item (C++) into a level I can set ItemComponentPtr to either ItemComponent or BP_ItemComponent. Ok great.

If I drag BP_Item into a level I can also set ItemComponentPtr to the same choices. However if I edit BP_Item to set a default type to ItemComponentPtr for all BP_Item objects, the variable ItemComponentPtr is not shown in the list of variables to edit. Why not?

I am trying to create C++ classes such that I have the ability to add functionality via C++. I then want the ability to apply functionality on top of those classes via blueprints. This means I want a BP_Item class that can select a BP_ItemComponent class for its ItemComponentPtr variable. As long as BP_ItemComponent subclasses ItemComponent, I don’t see why this wouldn’t be possible.

Other issue:
I noticed when selecting a different type for a component variable, that in the editor it immediately adds that component to the component list for that object. However if I change that variable to a different type (even None), it doesn’t remove the previously selected component from the component list? Thoughts?

Thanks for your time.