在Java中,子类可以继承父类的方法,但不能更改这些方法的返回类型。如果子类想要重写(override)父类的方法,返回类型必须与父类方法的返回类型相同,或者子类的返回类型应为父类返回类型的子类。
class Parent {
Number getNumber() {
return new Integer(10);
}
}
class Child extends Parent {
@Override
Integer getNumber() {
return 10;
}
}
在这个例子中,Parent
类有一个返回类型为 Number
的方法 getNumber
,而 Child
类重写了这个方法,将返回类型改为了 Integer
,这是允许的,因为 Integer
是 Number
的子类。
如果尝试改变返回类型以产生不兼容的类型,如下所示:
class Child extends Parent {
@Override
String getNumber() {
return "10";
}
}
这将会导致编译错误,因为 String和 Integer都不是 Number的子类。
继承
继承是多态的前提
共性抽取
特征
单继承,一个子类只能有一个父类
多层继承,最顶层上类——Object
一个父类可以有多个子类
子类可以拥有父类的内容,
子类可以拥有自己专有的内容
父类就是普通类;子类:class xxx extends 父类
创建父类对象,只能使用父类成员
创建子类对象,可以使用父类子类成员
子类可以复写父类方法
父类子类成员变量重名后,创建子类对象时,
直接使用:子类对象.成员变量:左边是谁,就用谁的,没有向上寻找
间接使用:通过成员方法调用成员变量:本类中有成员,使用本类,没有向上找
三种变量在子类中
局部:直接用
本类:this
父类:super
构造方法中,子类构造共默认有一个super()
super()必须在构造的第一句,且只有一个
重写
继承关系中,方法名一样,参数列表一样返回值也有要求
创建子类对象,使用子类的方法
@override:检测正确复写
子类方法返回值类型必要小于等于父类方法返回值类型
子类方法权限必要大于等于父类方法权限
super
在子类成员方法中,访问父类成员变量
在子类成员方法中,访问父类成员方法
子类构造方法中,访问父类构造方法
this
本类成员方法中,访问本类成员变量
成员方法中,访问另个成员方法
本类构造方法中,访问另个构造方法——this(xxx),也是第一句。所以super与this不可以同时出现在构造中