4.继承
1.继承
1 | 修饰符 class class_name extends extend_class { |
其中,class_name 表示子类的名称;extend_class 表示父类的名称。
- 子类拥有父类非 private 的属性、方法。父类中的 private 成员在子类中是不可见的,因此在子类中不能直接使用它们。
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。(重写)重写父类的方法后,父类的方法会被隐藏,需使用super关键字调用
- Java 只允许单一继承(即一个子类只能有一个直接父类)
- 子类不能获得父类的构造方法(子类构造方法内第一行有一个隐藏代码super();
注意:如果在父类中存在有参的构造方法而并没有重载无参的构造方法,那么在子类中必须含有有参的构造方法,因为如果在子类中不含有构造方法,默认会调用父类中无参的构造方法,而在父类中并没有无参的构造方法,因此会出错。
2.方法重写
子类中定义一个方法,这个方法的类型和父类的方法类型一致,并且这个方法名,参数个数,参数的类型,返回值类型和父类的方法完全相同。⼦类中重写⽅法的访问权限不能低于⽗类中⽅法的访问权限(public>protected>default>private)。
- 重写的方法可以使用 @Override 注解来标识。
- 父类的成员方法只能被它的子类重写。
- 声明为 final 的方法不能被重写。
- 声明为 static 的方法不能被重写,但是能够再次声明。
- 构造方法不能被重写。
- 子类和父类在同一个包中时,子类可以重写父类的所有方法,除了声明为 private 和 final 的方法。
- 子类和父类不在同一个包中时,子类只能重写父类的声明为 public 和 protected 的非 final 方法。
- 如果不能继承一个方法,则不能重写这个方法。
3.对象类型转换
1.向上转型
父类引用指向子类对象为向上转型,(子类对象赋值给父类引用)语法格式如下:
1 | fatherClass obj = new sonClass(); |
其中,fatherClass 是父类名称或接口名称,obj 是创建的对象,sonClass 是子类名称。
向上转型特点:
- 向上转型对象不能操作子类新增的成员变量(失掉了这部分属性),不能使用子类新增的方法(失掉了一些功能)。
- 向上转型对象可以操作子类继承或重写的成员变量,也可以使用子类继承的或重写的方法。
- 如果子类重写了父类的某个方法后,当对象的向上转型对象调用这个方法时一定是调用了这个重写的方法,因为程序在运行时知道,这个向上转型对象的实体是子类创建的,只不过损失了一些功能而已。
- 对象的向上转型对象再强制转换到该子类的一个对象,这时又具备了子类所有的属性和功能。
2.向下转型
1 | sonClass obj = (sonClass) fatherClass; |
其中,fatherClass 是父类名称,obj 是创建的对象,sonClass 是子类名称。
向下转型特点:
- 向下转型对象可以操作父类及子类成员变量和成员方法。
- 向下转型对象访问重写父类的方法时,操作的是子类的方法。
- 向下转型必须进行强制类型转换。
- 向下转型必须保证父类引用指向的对象是子类向上转型成的对象(只有子类转换成的父类 才能强制转换成子类时不会出错)。
评论