What's the difference in write method bwt ovm_analysis_imp and ovm_subscriber?

Hi,
I am a little confused about the write method bwt ovm_analysis_imp and ovm_subscriber.
In ovm_analysis_imp, there is a build-in write method which we don’t have to rewrite it in our ovm env, but just call it to do transaction transfer. right?
In ovm_subscriber,we rewrite write function which is a pure virtual function, that implement subscriber’s behavior.

do they have any relation bwt them???
Thanks.

can we also access write method in ovm_subscriber via hierarchy reference instead of via analysis_export?

If you look at the ovm_subscriber component source code, it has one ovm_analysis_imp declaration, which requires write implementation to be implemented in the ovm_subscriber component.
When you connect ovm_subscriber component to any analysis port, the write implementation will be called.

Yes, codes as belows.

typedef ovm_subscriber #(T) this_type;
ovm_analysis_imp #(T,this_type) analysis_export;

It is called in monitor explicitly,right?
And the route is,
ovm_analysis_port(monitor) → ovm_analysis_port(agent) → ovm_analysis_export(subscriber).
And in subscriber, we implement the write method.