学完了类和对象,自然就要学一下继承了,今天就来开启咯!!

1.类的继承

1.1类的继承

类的继承:在现有的类的基础上构建新类,新类重用了现有类的方法和字段,同时还可以向新类中 增添新的方法和字段以满足新的需求 

1.2类的继承的方法

学习Java的第三天——继承_多态

1.2.1方法覆盖

子类覆盖父类的方法时,子类中方法的访问权限不能低于父类中该方法的访问权限 

学习Java的第三天——继承_java_02

1.2.2调用父类——super

在子类中调用父类的方法,使用 super 关键字 

学习Java的第三天——继承_继承_03

1.super关键字的另一个作用是在子类的构造器中调用父类的构造器来初始化父类中的室友字段, 因为在子类构造器中无法访问父类的私有字段,所以不能在子类的构造器中直接初始化父类的私有 字段  2.如果没有在子类构造器中显示调用父类的某个构造器,则编译器会自动调用父类无参构造器 

学习Java的第三天——继承_java_04

1.2.3继承层次

只支持单继承

继承的时候构造方法不会继承,因此在子类需要重新书写构造方法,但是可以用super来调用父类的构造方法,但是使用时,super必须放在第一句

学习Java的第三天——继承_继承_05

1.2.4多态和动态绑定

置换法则:无论何时,只要程序需要一个超类对象,那么可以用一个子类对象来代替他 

学习Java的第三天——继承_java_06

多态性:一个对象变量可以指向多种实际类型对象的现象被称为“多态” 动态绑定:在运行时自动选择正确的方法进行调用的现象称为动态绑定,Java中如果方法是 用private、static、final修饰,则采用静态绑定,否则都采用动态绑定。 

1.2.5final类和final方法

1.类中用final关键字修饰的方法,在其子类中不能被覆盖 2.用final关键字修饰的类不能被继承 3.调用 final 方法的行为属于静态绑定,减少了动态绑定带来的开销 

学习Java的第三天——继承_继承_07

1.2.6强制类型转换

子类对象可以看做是父类的一个对象,比如一个student对象也是一个person对象学习Java的第三天——继承_java_08

1.子类对象转换成父类对象可以隐式转换 2.父类对象转换成子类对象需要强制类型转换 3.当要使用父类类型的变量调用子类独有的方法时需要使用强制类型转换,如:希望通过  Employee类型的变量e调用 Manager类中的方法(如 setBonus时),一般出现这种需求的  时候很可能是类设计的不合理,应该把这样的方法设计在超类 Employee中 

学习Java的第三天——继承_类_09

1.2.7抽象类

1.2.7.1抽象方法
1.没有方法体的方法称为抽象方法,即抽象方法只需声明,不需实现, 2.用关键字 abstract修饰抽象方法 

学习Java的第三天——继承_抽象类_10

1.2.7.2抽象类
1.一般称含有抽象方法的类称为抽象类 2.抽象类是不能被实例化的类,用 abstract修饰 
1.2.7.3 使用抽象类的注意事项
1.抽象类不能被实例化,即不能用 new 关键字去产生一个抽象类的对象,但可以用抽象类声明变量去指向该抽象类的子类对象 2.含有抽象方法的类一定是抽象类 3.抽象类可以作为基类派生出子类 4.抽象类的子类如果是一个非抽象类,那么该子类必须覆盖父类中所有的抽象方法,否则这个子类还是抽象类 5.抽象类中仍然可以有非抽象方法 

学习Java的第三天——继承_继承_11

1.2.8受保护访问

protected关键字

受保护成员不能被其他类访问,只能被子类和同一包中的其他成员访问 

学习Java的第三天——继承_抽象类_12

2.UML图

继承关系在UML图中,使用一个箭头来表示子类和父类之间的关系的,通常只有类名和公共 方法在UML设计图中 1.类名在方框顶部 2.任何数据成员在方框中间部分 3.方法在方框底部 

学习Java的第三天——继承_java_13

3.Object类

3.1Object类

1.Object是类是 Java 中所有类的最终祖先,每一个类都直接或间接由 Object类扩展而来  class Employee {...} 等价于class Employee extends Object {...} 2.可以用Object类型变量指向任意类型的对象  Object j obj = new Employee(...); 3.Object类型的变量只能执行各种通用的操作,如果要对它们进行专门的操作,需要强制类型转换  Employee e = (Employee)obj;  4.Object类中封装了一些通用的方法,一般这些方法需要在其子类中覆盖 

3.2Object类一些通用的方法

3.2.1equals方法

1.Object 的 类中的 equals 方法用于测试某个对象是否同另一个对象相等 2.Object 类中该方法的实现是判断两个对象是否指向同一与个对象,与“ “ ==” 的作用相同,一般 需要覆盖该方法 

学习Java的第三天——继承_继承_14

4.继承的设计技巧

1.将公共操作和字段放到超类中 2.尽量不要使用受保护字段,但是可以使protected方法 3.使用继承来模型化“is-a ”关系 4.除非所有继承的方法都有意义,否则不要使用继承 5.在覆盖方法的时候,不要改变预期的行为 6.使用多态,而非类型信息 7.不要过多的使用反射