【学习笔记】 唐大仕—Java程序设计 第4讲 类、包和接口之4.2 类的继承
super的使用
1.使用super访问父类的域和方法
注意:正是由于继承,使用this可以访问父类的域和方法。但是有时为了明确指明父类的域和方法,就要用关键字super。this和super都是指当前同一个对象
例如:父类Student有一个域age,在子类Student中用age,那么this.age,super.age来访问age是完全一样的:
void testThisSuper(){
int a;
a = age;
a = this.age;
a = super.age;
}
当然,使用super不能访问在子类中添加的域和方法
有时需要使用super以区分同名的域和方法
- 使用super可以访问被子类所隐藏了的同名变量
- 又如,当覆盖父类的同名方法的同时,又要调用父类的方法,就必须使用super。如:
@Override
void sayHello(){
super.sayHello();
System.out.println("My school is" + school);
}
在覆盖父类的方法的同时,又利用已定义好的父类的方法
2.使用父类的构造方法
构造方法是不能被继承的
- 比如,父类Person有一个构造方法Person(String, int),不能说子类Student也自动有一个构造方法Student(String, int)
但是,子类在构造方法中,可以用super来调用父类的构造方法。
Student(String name, int age, String school){
super(name, age);
this.school = school;
}
使用时,super必须放在第一句
父类对象与子类对象的转换
- 类似于基本数据类型数据之间的强制类型转换,存在继承关系的父类对象和子类对象之间在一定条件下也可以相互转换
(1).子类对象可以被视为其父类的一个对象,如一个Student对象也是一个Person对象
(2).父类对象不能被当做其某一个子类对象
(3).如果一个方法的形式参数定义的是父类对象,那么调用这个方法时,可以使用子类对象作为实际参数
(4).如果父类对象引用指向的实际是一个子类的对象。那么这个父类对象的引用可以用强制类型转换(casting)成子类对象的引用