不用多久,就会升职加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰。想想还有点小激动呢,
OK,睡醒了,我们说到继承就先来学习一下Java中继承的语法。
public SubClass extends SuperClass{
//类定义部分
}
详细介绍一下:
继承(inheritance)通过 extends 关键字实现,其中SubClass称为子类,SuperClass称为父类,基类,或超类。
修饰符如果是public,则该类在整个项目中可见;若无则该类只能在当前包可见;不可以使用private和protected修饰类。
为了初学者所以再次详细一点说:
继承是面向对象的三大特性之一,是Java中实现代码重用的重要手段之一。Java中只支持单继承,每个类只能有一个直接父类。
继承表达的意思是 is→ a 的关系,或者说是一种特殊和一般的关系,如Dog is Pet。同样,学生可以继承人,苹果继承水果等等。。。
在Java中,所有的Java类都直接或间接的继承了Java.lang.Object类。Object类是所有Java类的祖先。在定义一个类时,如果没有
使用extends关键字,那么这个类直接继承Object类。
下面我用表格叙述一下访问修饰符的访问权限
访问修饰符 | 本类 | 同包 | 子类 | 其他 |
private | √ | |||
默认(frendly) | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
抽象类
举一个例子:
Pet pet = new Pet("贝贝");
pet.print();
//Pet这里是宠物的缩写
//这里创建Pet是没有意义的,因为在实际生活中没有一种动物是宠物。
//宠物只是我们抽象出来的一个概念
那么如何限制它不被实例化呢?
我们可以使用Java中的抽象类来实现,用abstract来修饰Pet类,抽象类是不能通过New实例化:
public abstract class Pet{
//属性省略
}
final修饰符
用final修饰的类,不能再被继承,代码如下:
final class Penguin{
class SubPenguin extends Penguin{
//会出现错误
}
}
同时用final修饰的方法不能被子类重写。
final和abstract是功能相反的两个关键字,可以对比的记忆。
abstract 可以用来修饰类和方法,不能用来修饰属性和构造方法,方法可以用来修饰类,方法和属性,不能修饰构造方法。
java提供的很多类都是final类,如String类,Math类,它们不能再有子类。object类中一些方法,如果getClass(),notify(),wait()都是final方法
只能被子类继承而不能重写,但是hashCode(),toString(),equals(Objecg obj)不是final方法,可以被重写。