什么时候使用"方法覆盖"?
子类继承父类之后,当继承过来的方法无法满足当前子类的业务需求时,子类有权利对这个方法进行重新编写,有必要进行"方法的覆盖"。
当子类对父类继承过来的方法进行"方法覆盖"之后,子类对象调用该方法的时候,一定执行覆盖之后的方法。
怎样构成方法覆盖?
- 条件一:两个类必须要有继承关系。
- 条件二:重写之后的方法和之前的方法具有:
相同的返回值类型、
相同的方法名
相同的形式参数列表。 - 条件三:访问权限不能更低,可以更高。(这个先记住。) 条件四:重写之后的方法不能比之前的方法抛出更多的异常,可以更少。(这个先记住
注意1:方法覆盖只是针对于方法,和属性无关。
注意2:私有方法无法覆盖。
注意3:构造方法不能被继承,所以构造方法也不能被覆盖。
注意4:,方法覆盖只是针对于实例方法,静态方法覆盖没有意义。
覆盖to String方法:
关于object类中的tostring ()方法
1.toString ()方法的作用是什么?
含义:调用一个java对象的tostring()方法就可以将该java对象转换成字符串的表示
2.toString ()方法的作用是什么?
将“java对象"转换成"字符串的形式”。
3.object类中tostring ()方法的默认实现是什么?
public string tostring (){
return get…()+ @+Integer.toHexstring ( hashcode ( ) );
}
当输出一个引用的时候,println方法会自动调用引用的tostring方法
public class Account {
public static void main(String args[]) {
Time t=new Time(2000,9,17);
System.out.println(t);//输出t对象,自动调用toString方法
}
}
class Time{
private int year;
private int month;
private int day;
public Time(int year,int month,int day){
this.year=year;
this.month=month;
this.day=day;
}
public void year(int year){
this.year=year;
}
public int year(){
return year;
}
public void month(int month){
this.month=month;
}
public int month(){
return month;
}
public void day(int day){
this.day=day;
}
public int day(){
return day;
}
public String toString(){//对toString方法覆盖(重写)
return year+"年,"+month+"月,"+day+"日";
}
}
扩展:
- 静态方法不谈方法覆盖: 方法覆盖和多态有着必然的联系,静态方法的执行不需要对象,即不存在方法覆盖
- 私有方法不能方法覆盖: 在外部类五法访问私有的,即无法进行方法覆盖
- 构造方法不能方法覆盖: 构造方法不能被继承,即无法实现方法覆盖