继承
6.1 继承的概念
一个类继承另一个类。实现继承的类称为子类(subclass)也叫派生类,而被继承的类称为父类,也叫超类或基类。
通过“继承”一个现有的类,可以在子类中使用被继承的的类(父类)中的非私有的属性和方法。
类的方法和属性可以被继承,但是类的构造器(构造方法)不能被继承
假如多个类有相同的属性和方法,那么就可以创建一个具有他们共同属性和方法的类作为父类(基类),让子类来实现该父类,根据实际业务需求来添加新的属性和方法。
6.2 类的继承的使用
6.2.1 语法
Java中继承使用关键字 extends
[权限修饰符] class <类名> extends <父类名>
{
//类中代码
}
在java中一个类只能有一个直接父类,即:java只支持单继承(亲爹只能有一个。干爹可以有多个,学习接口时会学到),不支持多继承。(与C++不同)
6.2.2 特点
子类可以访问父类中非私有的成员变量和方法。
java只支持单继承不支持多继承:一个类最多只能有一个直接父类
正确的示例:
public class SubClass extends SuperClass{//正确
}
错误的示例:
public class SubClass extends SuperClass1, SuperClass2{ //错误,不能继承多个父类
}
3.java支持多层继承(继承体系)。B继承A, C可以再继承B
例如:
public class A{
}
public class B extends A{
}
public class C extends B{
}
4.一个儿子只能有一个亲爹,而一个父亲可以有多个儿子。即:一个类只能有一个父类,而一个类可以有多个子类。
方法覆盖
方法的重写:也叫方法的覆写;其就是在子类覆写一个与父类名字一样且参数列表相同的方法。以及返回值与修饰符也需要遵循以下规则。
(Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的)
1 方法重写的规则
方法覆写遵循规则:两同、两小、一大
两同: 方法名相同、参数列表相同
两小:被覆写的方法在子类中的返回值的引用类型的范围比父类小或者与父类相同。返回值类型只能与父类的返回值类型一致或是父类返回值类型的子类(子类的子类等)。
被覆盖的方法在子类中抛出的异常范围比父类小或者与父类相同(异常后续会讲)
一大:被覆盖的方法在子类中访问控制权限范围要比父类的大或者等同。(除了private,private的属性和方法不能被继承,所以也不能被覆盖)