第五章
1.子类不能访问父类的私有成员
2.当子类调用父类中的方法时,必须在方法名前用关键字super来声明这个方法是父类中的方法,否则会引发程序崩溃
3.Manage类继承于Employee类,比Employee类多一个属性为bonus
Mangage类的一个构造器为
public Manage(String name,double salary,int year,int month,int day){
super(name,salary,year,month,day);
bonus=0;
}
其中
super(name,salary,year,month,day);
这一行是调用父类Employee中含有name,salary,year,month,day参数的构造器的缩写
4.一个对象变量可以指示多种实际类型的现象被称为多态(比如一个父类的对象变量也可能指向子类),在运行时候能够自动地选择调用哪个方法的现象被称为动态绑定。
5.在java中,对象变量是多态的,一个Empolyee类型的对象变量,既可以引用Employee类的对象,也可以引用任何一个Emloyee子类的对象,如Manage等
6.当一个对象变量引用他的子类变量时,编译器仍把他看成他自己类的对象变量,也就是说他不能调用子类对象中特有的方法
7.在覆盖一个方法时候,子类的方法不能低于超类方法的可见性,特别是,超类的方法为public,在子类一定是public,否则会发生错误
8.定义类时候加上final修饰符,表示这个类不可被继承,如果给一个方法加上final修饰符,则该方法在子类中不能被重写。final类中的所有方法都自动成为final方法,但是final类中的域却没有自动的成为final
9.如果一个方法很短并且没有被覆盖,那么编译器就能对他进行优化处理,这个过程被称为内联。如,内联调用e.getName()就会被替换为访问e.Name域。
10.定义类的时候,在前面添加abstract修饰符,则这个类变为抽象类。在方法前面添加abstract则这个方法变为抽象方法。
11.包含抽象方法的类必须被声明为抽象类,抽象类中可以包含具体的方法和数据。
12.抽象类不能被实例化,如果Person是一个抽象类,则
Person p = new Person()
是错误的,但是可以定义一个抽象类的对象变量,但他只能引用非抽象子类的对象,如果Student是Person的非抽象子类,则
Person p = new Studnet()
是合法的。
13.Object() 是所有类的父类
Object()类中有许多有用的方法:
**equals()**方法检查一个对象是否等于另一个对象,判断两个对象是否具有相同的引用,多数类都会重写这个方法,因为比较两个类是否相等更多的时候是为了比较两个对象的各个值是否相等,而不是看他们是不是相同的引用
toString()方法: 用于返回对象值的字符串
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", salary=" + salary +
", bonus=" + bonus +
'}';
最好给每一个类都添加以toString()方法