In general, there are some corner cases, but as for public classes, every public class is stored in its own file and that file has the same name, including case as the class itself. That is how Java knows that when you say account class, it looks in the Account.class file. It doesn't have to search to find which file is this in it, does it by file name? That was the decision that Sun made 25 years ago or more. The compiled files have the same name, but are now.class, the class is account, the source is Account.java and the bytecodes are Account.class. When you declare a class, there are various things that you can say about them. We've done a few so far, our Car and a few other demos. Public, that means it will be visible throughout the runtime environment as opposed to a protected class, which would have limited visibility. Abstract is a more advanced topic we will have much later. In this specialization, we'll talk about abstract classes. One aspect about abstract classes, you cannot create instances of them. They have special purposes for why we might do an abstract class in Java. We will cover that much further along in our curriculum. A final class. Very rarely done. Some aspect of this might be from a security perspective. A final class is one that you cannot create a subclass of, it is final. There are no subclasses, there are not going to be a pluggable replacement for it. Things like a security manager might be a final class because they don't want you to be able to create your own subclass of that security manager and perhaps shall we say, override its behavior. We've talked about inheritance. We will be covering that later, but this is just telling you where it would go. Your class extends whatever class it wants to inherit and there can be no more than one. You cannot in Java extend more than one base class or inherit directly from more than one base class. It's a single path. Now, if you don't say extends, you don't get to be a new route. Every class in Java extends java.lang.Object. If you don't say you extend something, the Java compiler will imply that you mean to say, extends java.lang.Object and they will do it for you. There is no way to avoid it. Every Java class that's ever been written other than java.lang.Object extends something explicitly or implicitly. Implements, you can have many multiple interface names. Again, we're going to talk about interfaces later in the curriculum, but this is syntactically where that would go. Public class, some particular class implements and then a potentially comma separated list of interfaces. We will talk about what they are and why you would care when we get to the appropriate point in our curriculum. Following all of that, the mandatory braces and the body of the class, most classes will be public. We'll explicitly say that. Don't worry about the take of the angle brackets and make it public because the angle brackets here are saying things that are optional that you don't need to say, but we will say public almost always. Here is the example of our Car class. Just with no attributes or methods, the class is named Car. It will be in a file Car.java, and when it is eventually compiled, it will be in Car.class. This is in a package. It doesn't say package, but it's in one. It's in the default package which is an empty name, an empty string if you will, and that is not a good idea. From the get-go with all of our examples, we have put them in a package. At the top of our files, we have package com.learnquest.demos. We've always been in a package. It's not a mandatory requirement, but remember, if everybody were in the default package, we'd have that name collision problem, which is one of the primary reasons for using package names is to prevent name collisions. In other words, the ability for MySQL to have their driver class and me to have my driver class, which not only aren't the same code, they're not even the same business semantic. Mine is about driving vehicles and theirs is about connecting to a database. The first line of a Java file would be where we have the package declaration. Here, you see that. Here, now we've moved Car in this case into the com.lq package. There we have it. We have now provided the shell of a class and put it into a package.