方法重写(override)遵循的原则

简介: 1.两同两小一大原则两同:方法名相同,形参列表相同。两小:子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常更小或相等。一大:子类方法的访问权限应比父类方法的访问权限更大或相等。尤其指出:覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。

1.两同两小一大原则

两同:方法名相同,形参列表相同。

两小:子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常更小或相等。

一大:子类方法的访问权限应比父类方法的访问权限更大或相等。

尤其指出:覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。

2.注意方法重写(override)与方法重载(overload)的区别

  • 重载主要发生在同一个类的多个同名方法之间。
  • 重写发生在子类与父类的同名方法之间。
  • 子类中重写的方法的返回值不能大于父类中被重写的方法的返回值类型 (可以关系相同、或者时父类的返回值类型的子类)
  • 父类中被重写方法的返回值类型位A类型,则子类中重写方法的返回值类型可以是A类型,也可以是A类型的子类
  • 父类中被重写方法的返回值类型为基本类型,则子类中的重写方法的返回值类型必须跟父类方法的返回值类型相同

案例演示

//子类重写方法  访问权限的题型//错误演示
//class person1{
  String name ="父";
  public void function()
  {}
}
class son1 extends person1{
  String name ="子";
  private void function()
  {}
}
// 子类中重写的方法的返回值不能大于父类中被重写的方法的返回值类型  错误演示
class person1{
  String name ="父";
  public int function()
  {
    return 1;
  }
}
class son1 extends person1{
  String name ="子";
  public Object function()
  {
    return "";
  }
}
目录
相关文章
|
Java
【Java面向对象】继承的认识与实现(2) 关键字 this 与 super 区别
【Java面向对象】继承的认识与实现(2) 关键字 this 与 super 区别
66 0
|
9月前
|
Java
【继承之extends关键字和super关键字】
【继承之extends关键字和super关键字】
51 0
【C++要笑着学】多态 | 重写(覆盖) | 协变构多态 | 父虚子非虚也构多态 | final与override关键字(C++11) | 抽象类 | 纯虚函数 | 抽象类指针
本章我们继续讲解面向对象三大特性,上一章我们讲解了继承,本章我们讲解多态。从多态的概念一步步讲解,介绍构成多态的必要条件和两个例外。还会顺带讲解一下 C++11 更新的两个和多态有关系的关键字 final 和 override。上一章我们讲解了虚函数,本章会先补充纯虚函数的概念,然后再引入抽象类的概念。本章我们只学习C++多态的基础知识,至于多态的原理(VTBL、决议等)的难度相对较大,我们单独放到下一章去做专门讲解。
249 0
【C++要笑着学】多态 | 重写(覆盖) | 协变构多态 | 父虚子非虚也构多态 | final与override关键字(C++11) | 抽象类 | 纯虚函数 | 抽象类指针
|
Java 编译器
重写,重写规则 Super 关键字的使用,重写与重载之间的区别 , @override有什么用,以及加不加@override有什么区别
重写,重写规则 Super 关键字的使用,重写与重载之间的区别 , @override有什么用,以及加不加@override有什么区别
223 0
|
Java C语言
Java继承——方法重写
Java继承——方法重写
111 0
|
Java
Java面向对象——继承、super、this
Java面向对象——继承、super、this
136 0
Java面向对象——继承、super、this
写出方法覆盖(override)和方法重载(overload)区别
写出方法覆盖(override)和方法重载(overload)区别
96 0
|
Java
Java面向对象——多态、final
Java面向对象——多态、final
107 0
|
Java
【JavaSE】方法重写/覆盖(override)
【JavaSE】方法重写/覆盖(override)
111 0
【JavaSE】方法重写/覆盖(override)
|
Kotlin
【Kotlin】Kotlin 类的继承 三 ( super 关键字使用 | super@ 外部调用父类方法 | 子类选择性调用 父类 / 接口 方法 super )
【Kotlin】Kotlin 类的继承 三 ( super 关键字使用 | super@ 外部调用父类方法 | 子类选择性调用 父类 / 接口 方法 super )
765 0