1.继承与多态之关键字
1)super关键字
在子类中使用super关键字,可以引用当前对象的父类对象;
①在子类中调用父类中被覆盖的方法,格式为:
super.methodName([paramlist])
②在子类中调用父类的构造方法,格式为:
super.([paramlist])
③在子类中访问父类中被隐藏的成员变量,格式为:
super.variableName
这里,methodName 表示要调用的父类中被覆盖的方法名;paramlist 表示为方法传递的参数; variableName 表示要访问的父类中被隐藏的变量名。
2)final修饰类
使用final修饰符可以修饰类、方法和变量。
①当修饰类时,该类称为最终类(final class),最终类不能被继承。如:
Math类、String类
②当修饰方法时,该方法不能被子类覆盖。如:
class AA{
public final void method(){}
}
class BB extends AA{
public void method(){} //该语句发生编译错误
}
③当修饰变量时,该变量为常值变量,一旦赋值不能改变。如:
class Test{
public static final int SIZE = 50;
public void methodA(final int i){
i=i+1; //该语句产生编译错误,不能改变i的值
}
public int methodB(final int i){
final int j = i + 1; //该语句没有错误,可以使用i的值
return j;
}
}
2.继承和多态之对象上转型和下转型
子类是父类的特殊化,每个子类的实例也是父类的实例,但反过来不成立。因此,子类对象和父类对象在一定条件下也可以互相转换,这种类型转换一般称为对象转换或造型(casting)。对象转换也有自动转换和强制转换之分。
1)上转型
由于子类继承了父类的数据和行为,因此子类对象可以作为父类对象使用,即子类可以自动转换为父类对象。如:假设parent是一个父类型引用,child是一个子类型(直接或间接)引用
parent = child; //子类对象自动转换为父类对象
把引用类型转换为子类类型称为向上转换(up casting ) 。
注意:向上转型对象不能操作子类新增的成员变量,不能使用子类新增的方法。
2)下转型
反过来,也可以将一个父类对象转换成子类对象,这时必须用到强制类型转换“()”,必须确保父类对象是子类的一个实例,否则报错。语法:
子类类型 引用名 = (子类类型)父类引用;
注意:向下转型对象可以操作父类及子类成员变量和成员方法。
3.继承和多态之方法重载
如果同一个类中包含了两个及两个以上方法名相同,方法参数的个数、顺序或者类型不同的方法,则称为方法重载。
1)判断重载的依据
①同一个类中,方法名称一致。
②与返回值、访问修饰符无关。
③方法参数的个数、类型或者顺序不一致。
2)构造方法的重载
①构造方法的名称必须与类名相同。
②构造方法不能有返回值,也不能返回void。
③构造方法必须在创建对象时用new运算符调用。
//构造方法的重载
pubulic class Employee {
private String name;
private int age;
private double salary;
//无参构造方法
public Employee() {
this.name = "";
this.age = 0;
this.salary = 0.0;
}
//带一个参数构造方法
public Employee(String name){
this.name = name;
this.age = 0;
this.salary = 0.00;
}
4.继承和多态之方法重写
在子类中创建一个与父类中相同名称、相同返回值类型、相同参数列表的方法,只是方法体中的实现不同,以实现不同于父类的功能,这种方式被称为方法重写(override),又称为方法覆盖。当父类中的方法无法满足子类需求或子类具有特有功能的时候,需要方法重写。
1)方法重写的规则
①参数列表必须完全与被重写的方法参数列表相同。
②返回的类型必须与被重写的方法的返回类型相同。
③访问权限不能比父类中被重写方法的访问权限更低。
2)方法重写的实现
①重写的方法可以使用 @Override 注解来标识。
@Override
public String toString(){
return "姓名:"+name+"年龄:"+age;
}
②父类的成员方法只能被它的子类重写
public class Parent{
public void display(double i){
System.out.println(i);
}
}
//定义Parent类的子类
public class Child extends Parent{
public void display(double i){ //覆盖父类的display()方法
System.out.println(2 * i);
}
}
Parent 类中定义了display()方法,Child类的display()与Parent类的display()参数和返回值类型都相同,方法重写但实现不同。
③声明为 final 的方法不能被重写。
④声明为 static 的方法不能被重写,但是能够再次声明。
⑤构造方法不能被重写,private方法不能重写。
感谢阅读