Thank you all for you excellent explanations. Unfortunately, I see now that I asked the wrong question, starting from the top down. I should have started from the bottom up, which I will do now in the hope of making my question better understood.
In my current project, I include a number of standard libraries – LiquidCrystal_I2C, SD, Ethernet and many others. The three libraries just mentioned all generate the same error:
'Object of abstract class type “[various]” is not allowed: pure virtual function “Print::write(uint8_t)” has no overrider'
These libraries are all unmodified direct downloads using Arduino's library manager. They all (obviously) subclass from object “Print”, and have failed to provide a write(uint8_t) method to override the pure virtual method of the same signature from that parent object.
This surprises me. As a consumer of the standard Arduino libraries, am I expected to modify those libraries before I can use them? What purpose does a write(uint8_t) method have in the Ethernet library? How would I know? Am I expected to study the code of the entire library to find out? Where is the documentation for the design of this library (it's certainly NOT in the actual code).
In other words, if it was the intention of the authors of these libraries that I should provide my own write(uint8_t) method, I would expect some written guidelines about where and how that method fits into the overall design of the library. If it was NOT their intention that I should write the method, then the authors should have written one for me, so their classes are NO LONGER ABSTRACT and can be used (or even subclassed) in my own code.
That is my situation, which prompted me to ask why Print is an abstract class in the first place. I understand the reasons for having pure virtual methods, and they all have to do with requiring the end user to provide a necessary method which can't be anticipated by the original authors. I get that. What I don't get is what purpose the write(uint8_t) function plays in the Ethernet (or SD, or LiquidCrystal_I2C) library, so I have some clue as to what I should be writing. Sorry for the confusion.