——类、父类、子类
关键字extends表示继承。
在Java中,所有的继承都是公有继承。
子类中的方法不能直接访问父类的私有域
super关键字:
1.调用父类的方法
2.调用父类的构造器
如果子类的构造器没有显式地调用父类的构造器,则将自动地调用父类的默认构造器。如果父类没有不带参数的构造器,而子类的构造器中又没有显式地调用父类的其他构造器,则Java编译器将报告错误。
一个对象变量可以引用多种实际类型,称为多态
在运行时能够自动选择调用哪个方法,称为动态绑定
在覆盖一个方法时,子类的方法的访问权限不能低于父类方法的访问权限。特别是,如果父类方法是public,子类的方法也一定要声明为public。
不允许继承的类被称为final类。如果想阻止该类被继承,使用final修饰符声明。
类中的方法也可以被声明为final,如果这样做,那么它的子类就不能覆盖这个方法。
进行类型转换的唯一原因:在暂时忽视对象的实际类型之后,使用对象的全部功能。
因此,应该养成一个良好的编程习惯:在进行类型转换之前,先使用instanceof检查是否能够成功地转换。
if(ClassA instanceof ClassB)
{
//再把ClassA转换成ClassB
}
抽象类,作为派生其他类的基类,而不作为想使用的特定的实例类。抽象类中,声明一个完全不需要实现的方法,使用abstract关键字,称为抽象方法。为了提高程序的清晰度,包含一个或多个抽象方法的类本身必须被声明为抽象的。
除了抽象方法之外,抽象类中还可以包含具体数据和具体方法。建议尽量将通用的域和方法(不管抽不抽象)放在父类中(不管是否抽象类)。。。
抽象类不能被实例化,也就是说,如果将一个类声明为abstract,就不能创建这个类的对象。但需要注意的是,可以定义一个抽象类的对象变量,只能引用非抽象子类的对象。
例如:Person类是抽象类,Student类继承Person类
Person person = new Student("Tony");
这里的person是一个抽象Person类的变量,它引用了一个非抽象子类Student的实例。
我们都知道,最后将类中的域标记为private,而方法标记为public。但是有些时候,想允许子类的方法访问父类的某个域,则需要将这些域声明为protected。
关于Java访问权限的4个访问修饰符:
1、 private ——仅对本类可见
2、 public —— 对所有类可见
3、 protected —— 对本包和所有子类可见
4、 default(默认) —— 对本包可见