Abstracting Abstract Classes3:45 with Ben Deitch
In this video we'll learn how to use abstract classes.
Inheritance is a powerful concept and 0:00 it gives us a huge amount of freedom with how we develop apps. 0:02 However, sometimes, it makes sense to limit some of that freedom. 0:06 One place we might want to add a restriction is with our animal class. 0:11 Right now, if we wanted to, we could create a new animal object. 0:16 This might not seem like an issue, but think about it. 0:21 What does a generic animal look like? 0:24 If I asked you to draw an animal, you wouldn't draw some amorphous generic blob. 0:27 You'd draw a specific animal, like a goat or a tiger. 0:32 You can't just create an animal. 0:36 It has to be something more specific. 0:38 In Java, this sort of class is called an abstract class. 0:41 And to make an abstract class, 0:45 you just write the word abstract before the word class. 0:47 But before we make the magic happen, 0:51 let's look at the two things you need to know about abstract classes. 0:53 1, abstract classes cannot be instantiated. 0:57 You can't use the new keyword with an abstract class. 1:02 And 2, abstract classes can have abstract methods, 1:05 which are methods without a method body. 1:09 You can think of an abstract method as pretty much just a forced override. 1:12 It's like saying, if you inherit from me, you have to override this method. 1:18 Looking back at our vehicle example, the vehicle class would be an abstract class, 1:23 and inside the vehicle class we might have an abstract method called move. 1:29 This way, all vehicles will have a move method, but 1:34 we'll leave it up to the specific vehicles to tell us how they move. 1:37 All right, let's get back to the code and get some practice with abstract classes. 1:42 Let's start by making our animal class abstract by adding the word 1:47 abstract before the word class. 1:52 Then, up in the main method, 1:55 let's see what happens when we try to create a new animal. 1:57 Let's add a line at the bottom and 2:01 then type Animal animal = new Animal();. 2:04 Which gives us an error that animal is abstract and cannot be instantiated. 2:09 Nice, let's delete that line, and 2:15 then let's try creating an abstract method called findFood. 2:18 Since all animals need to find food, but they all do it differently, 2:23 this is a good place for an abstract method. 2:27 Let's add some space after the constructor, and then declare our method. 2:30 Start with the abstract keyword, then add the method signature, 2:34 so void, findFood, with no parameters, and 2:40 instead of adding a method body, just add a semicolon. 2:43 Now that the animal class has an abstract method, 2:48 we'll need to override that method in our dog class. 2:51 Luckily, Intellij already knows how to do this. 2:55 So we can just use Alt+Enter to implement the method. 2:58 Finally, to finish the method, let's print out that the dog looks at its human and 3:04 then call the makeSound method. 3:09 So sout, and we'll say, looks at human. 3:11 And then call makeSound. 3:20 Perfect! 3:23 Now to test it, back in the main method, 3:25 let's call dog.findFood instead of dog.makeSound. 3:28 Looks like I need to go feed the dog. 3:37 But before I go, 3:39 there is one more gotcha about objects that we should really talk about. 3:40
You need to sign up for Treehouse in order to download course files.Sign up