什么是继承?
多个类存在相同的属性和行为时,将这些内容抽取到单独的一个类中,那么多个类无需再定义这些属性和行为,只需要继承那个类即可。
注释:多个类称为子类,一个类称为父类、超类和基类。
继承语法
class 子类名 extends 父类名{
……
}
继承的特点
1.Java只支持单继承,不支持多继承(一个类只能有一个父类,不可能有多个父类)
2.Java支持多层继承(继承体系),即继承有传递性,子类还可以有子类
3.一切类的祖先——java.lang.Object,所有类都直接或者间接地继承了java.lang.Object
4.继承是子类继承父类的所有东西,除了构造函数
继承条件下类的访问权限
子类自动拥有父类申明的public和protected的成员,这是继承特性的体现之一。
private:属性和方法不能被子类直接使用,能被子类继承,无法被使用;但是将private属性包装到public方法中,则能被子类使用
public:可以被子类直接使用
protected:同一包中的子类可以使用,另一包中的子类也可以使用
default:如果不知名任何权限,则默认同一包中的类可以访问
不允许继承的类
final class 类名{
}
- 以final声明的方法不允许覆盖
- 以final声明的变量不允许更改
- 利用final可以设计出一种特殊的“只读”的“不可变类”
用处:可以方便和安全地用于多线程环境中;
访问它们可以不用加锁,因为能提供较高的性能;
this和super
this:当前对象的引用
- 本类在非静态方法中使用非静态变量和非静态方法,可以使用【this.变量名】和【this.方法名(参数列表)】的方式调用,实际情况是,this关键字通常被省略
- 在上面的情况下,包含一个特殊情况,假如方法中定义了一个与类成员变量同名的局部变量,这时在方法内部调用类的成员变量就必须使用this关键字来引用
super:父类对象的引用
- 子类重写父类方法之后,再次调用父类的该方法,必须使用【super.方法名(参数列表)】调用
- 子类的构造方法中默认存在父类的无参构造方法,也可显示声明其他的构造方法,声明必须使用【super(列表参数)】
- 在构造方法中,super与this关键字不能同时出现,且位于构造方法首行