Inheritance:
Members of a class: instance variables and methods.
Subclass extends the superclass. The subclass inherits from the superclass.
Instance variables are not overridden.
The lowest method in the inheritance tree wins.
IS-A relationship, extends, implements.
HAS-A relationship.
A subclass inherits all public instance variables and methods of the superclass, but not the private instance variables and methods.
Polymorphism:
1. Reference type can be a superclass of the actual object type.
Animal a = new Dog();
2. Polymorphic arrays.
Animal[] a;
3. Polymorphic arguments and return types.
public void takeAnimal(Animal animal);// can take a Dog as arguments.
Non-extensive class:
1. non-public class can be subclassed only by classes in the same package.
2. final class
3. private constructor. Cannot be instantiated.
Non-overridden method:
1. final class
2. final method
The overridden method can't be less accessible.
Overloading a method:
Methods with same name but different arguments lists. No polymorphism. Method signature: name and arugments.
1. Argument lists must be different.
2. Return types can be different but should not be the only difference.
Abstract class and Concrete class:
Abstract class cannot be instantiated.
Abstract methods must be overridden. The class also has to be abstract.
Abstract class can have abstract and non-abstract methods.
Abstract class can implement inherited abstract methods.
Any class that doesn't explicitly extend another class, implicitly extends Object.
The compiler decides whether you can call a method based on the reference type, not the actual object type. The reference is a Remote Control which refers to the corresponding object.
Use instanceof to check the class type.
if(o instanceof Dog) {
Dog d = (Dog) o;
}
Java does not allow multiple inheritance.
A java interface only has abstract methods. Interface methods are implicitly public and abstract, and not encouraged to type these words.
Extends one parent. Interface are the roles to play.
接口往往是对外展示的,方法默认为public和abstract。static方法只供interface定义内使用。default可以定义函数body,可以被复写。