Inheritance
> Click or hit Control-Enter to run Example.main above
Midterm Review
Overall the class did well on the midterm–congratulations!
- 
I’ve released two example programming questions to the HW125 problem set.
 
Interpreting Your Midterm Result
I’d mainly consider how you did on the programming questions:
- 
3/3: Great job.
 - 
2/3: You did well, but plan to continue working hard for the rest of the semester.
 - 
1/3: Something about how you are preparing for exams needs to change…
 - 
0/3: Please talk to a course staff member.
 
Questions?
About the midterm, grading, or anything in particular?
Review: The static Keyword
public class Course {
  public static int count = 0;
  public static void printName() {
    System.out.println("Name");
  }
}
public class Example {
  public static void main(String[] unused) {
    // We can call printName without creating an instance
    Course.printName();
    // We can increment count without creating an instance
    Course.count++;
  }
}
static methods and variables belong to the class, not to a specific
instance.
Review: static Methods
public class Course {
  public static void printName() {
    System.out.println("Name");
  }
}
public class Example {
  public static void main(String[] unused) {
    // This works
    Course.printName();
    // This also works
    Course CS125 = new Course();
    CS125.printName();
  }
}
- 
staticmethods are called directly on the class, rather than on an instance - 
…but they can be called on the instance as well.
 
Review: static Methods and this
public class Course {
  public String name;
  public static void printName() {
    // This doesn't work
    System.out.println(name);
  }
}
static methods can be called without an instance, and so can’t use this
Review: static Variables
public class Course {
  public static int count = 0;
  public void printCount() {
    System.out.println(count);
  }
}
public class Example {
  public static void main(String[] unused) {
    Course CS125 = new Course();
    Course CS225 = new Course();
    Course.count++;
    CS125.printCount();
    CS225.printCount();
  }
}
static variables are shared by all instances of a given class
Review: static and public
public and private also work on static variables and methods
- 
public: the (static) variable can be read or written by anyone - 
private: the (static) variable can only read or written by methods defined on that class - 
public: the (static) method can be called by anyone - 
private: the (static) method can only be called by other methods on that class 
static Object Creation Method
We can also use a class method to be able to return null when creating a new
object if invalid parameters are supplied.
> Click or hit Control-Enter to run Example.main above
final and Constants
class Example {
  /** The number of hours of sleep you should get per night. */
  public static final int HOURS_PER_NIGHT = 8;
  ...
}
In Java a final variable cannot be modified.
You usually see this done to establish useful constant values—which can be
either public or private
> Click or hit Control-Enter to run Example.main above
Questions About static or final?
> Click or hit Control-Enter to run Example.main above
Inheritance
public class Pet {
  protected String name;
  protected String type;
  public void printMe() {
    System.out.println("I'm a " + type + " named " + name);
  }
}
public class Dog extends Pet {
  Dog(String setName) {
    name = setName;
    type = "Dog";
  }
}
Dog chuchu = new Dog("Chuchu");
chuchu.printMe();
Java allows objects to inherit state and behavior from another class.
Inheritance Terminology
public class Pet { }
public class Dog extends Pet { }
public class Cat extends Pet { }
In Java we establish inheritance using the extends keyword.
- 
DogextendsPetand so inherits state and behavior fromPet - 
Catalso extendsPetand so also inherits state and behavior fromPet - 
We sometimes call
PetDog's andCat's parent class - 
We sometimes call
DogandCatPet's children 
More Inheritance Terminology
public class Pet { }
public class Dog extends Pet { }
public class Mutt extends Dog { }
In Java we can have have multiple levels of inheritance.
- 
DogextendsPetand so inherits state and behavior fromPet - 
MuttextendsDogand so inherits state and behavior fromDogandPet - 
We sometimes call
PetandDogMutt's ancestors - 
We sometimes call
DogandMuttPet's descendants 
protected
public class Pet {
  public String name; // Anyone can set me
  private String secret; // Only I can set this value
  protected String type; // My descendants can use this value
}
public class Dog extends Pet {
  Dog(String setName) {
    name = setName;
    type = "Dog";
  }
}
- 
public: the variable can be read or written by anyone - 
private: the variable can only read or written by methods defined on that class - 
protected: the variable can only read or written by methods defined on that class or its descendants 
> Click or hit Control-Enter to run Example.main above
The Dirty Truth About protected
public class Pet {
  protected String name;
}
public class Dog extends Pet {
  Dog(String setName) {
    name = setName;
  }
}
public class Example {
  public static void main(String[] unused) {
    Dog chuchu = new Dog("Chuchu");
    chuchu.name = "Xyz"; // This works...
  }
}
- 
protected: the variable can read or written by methods defined on that class or its descendants… in any package - 
protected: the variable can also be read and written by any method in the same package 
public, private, and protected
Variables:
- 
public: the variable can be read or written by anyone - 
private: the variable can only read or written by methods defined on that class - 
protected: the variable can be read or written by methods defined on any descendant of that class in any package or any class in the same package 
Methods:
- 
public: the method can be called by anyone - 
private: the method can only be called by other methods on that class - 
protected: the method can be called by other methods defined on any descendant of that class in any package or any class in the same package 
Announcements
- 
No Coders on this week’s quiz. Chapter 4 for next week.
 - 
The autograder is working again. Please use it to check your MP1 scores to ensure you meet the early deadline.