Изображение является абстрактным классом.Вы не можете создать экземпляр Image напрямую.BufferedImage является потомком, и вы можете создать его экземпляр.Итак, если вы понимаете абстрактные классы и наследование, вы поймете, когда использовать каждый из них.
Например, если вы использовали более одного потомка Image, они собираются использовать некоторые общие свойства, которыеунаследовано от Image.
Если вы хотите написать функцию, которая будет принимать любой вид потомка в качестве параметра, вы можете сделать что-то вроде этого:
function myFunction(Image myImage) {
int i = myImage.getHeight();
...
}
Затем вы можете вызвать функциюпередав ему BufferedImage или VolatileImage.
BufferedImage myBufferedImage;
VolatileImage myVolatileImage;
...
myFunction(myVolatileImage);
myFunction(myBufferedImage);
Вы не будете преобразовывать изображение в BufferedImage, потому что у вас никогда не будет изображения.