Implements e extends em Java: quando usar e qual a diferença?
Olá a todos! Comecei a estudar Java e não consigo entender a diferença entre as palavras-chave extends e implements. Parece que ambas são usadas para herança, mas quando usar cada uma? \n\nEscrevi um pequeno código, mas ele não compila e sinto que estou confundindo os conceitos:\n\n```java\nclass Animal {\n void eat() {\n System.out.println("Come");\n }\n}\n\ninterface Pet {\n void play();\n}\n\n// Aqui não tenho certeza\nclass Dog extends Animal implements Pet {\n // tentando sobrescrever o método da interface\n void play() {\n System.out.println("Brinca com a bola");\n }\n}\n\npublic class Main {\n public static void main(String[] args) {\n Dog dog = new Dog();\n dog.eat();\n dog.play();\n }\n}\n```\n\nErro: o método play() em Dog não sobrescreve o método de Pet porque não é public. Corrigi para public, mas ainda não entendo completamente:\n\n1. Por que para a classe Animal usei extends e para Pet usei implements?\n2. Pode-se fazer o contrário: