重写也称为覆盖, 是指子类与父类的方法名相同但是可以有不同的权限(子类权限需大于父类),返回值(J2SE 5.0以后增加的功能,且子类的返回值必须是父类返回值的子类)或者方法实现。

重写体现了子类补充或者改变父类方法的能力, 通过重写, 可以使一个方法在不同的子类中表现出不同的行为。

public class Animal {

protected void cry(){

System.out.println("animal crying")

}

}

public class Cat exrends Animal{

@Override

public void Cry(){

System.out.println("Cat crying")

}

}

需要注意的是, 重写方法不能声明比被重写方法更宽泛的检查异常, 比如父类方法中声明了IOException, 那么子类重写方法只能申明IOException或者其子类或者不声明, 不能声明Exception

why?  因为try  catch的时候,只能捕获到父类声明的异常范围

存疑: 在kotlin中, 下面代码并没有报错, 难道kotlin中可以?

open class Animal {
open fun cry(){
println("cry...")
throw IOException()
}
}

class Dog: Animal() {
override fun cry(){
println()
throw Exception()
}
}

class Test {
val dog = Dog()

fun test(){
try {
dog.cry()
} catch (e: Exception){

}
}
}

子类可以继承父类的非私有成员变量和成员方法, 但是如果子类声明的成员变量与父类的同名, 则子类不能继承父类的成员变量, 此时称子类的成员变量隐藏了父类的成员变量。

如果子类声明的成员方法与父类的同名, 且方法返回值,参的个数和类型都相同, 则称为子类重写了父类的成员方法 。

这时, 如果子类想要访问父类的成员变量/成员方法, 就需要用到super关键字

声明为static/ final的方法 (private也属于final) 不能被子类重写

因为这部分方法是静态绑定的, 编译器一开始就能确定要调用的版本, 并且在整个运行期间是不可变的, 在类加载的时候就会把符号引用转化为该方法的真正引用, 并不具有多态性

与之对应, 在程序运行期间才确定调用版本的方法叫做动态绑定,此时,虚拟机会为每个类创建一个方法表, 列出所有方法的签名和实际调用的方法,这样一来,虚拟机运行时只需要查找该表就行了。 只有动态绑定的方法才具有多态性。

当然我们可以在子类中声明一个和父类同样方法名的static方法, 但它实际上和父类的方法是两个互不相干的方法

重构: 是指子类与父类方法名相同但方法实现不同。 重构是特殊的重写

public class Dog exrends Animal{

@Override

protected void Cry(){

System.out.println("Dog crying")

}

}

重载: 发生在同一个类之间。 同一个类中,同名方法的参数类型/个数/顺序不同

最常见的重载就是构造方法, 因为构造方法的名称已经由类名确定, 那么如果希望以不同的方式来实例化对象,就必然要用到方法重载

重载以参数来区分方法,返回类型可同可不同, 但参数必须不同

public class Wolf exrends Animal{

@Override

protected void Cry(){

System.out.println("Dog crying")

}

protected void eat(String meat){

System.out.println("Wolf eat:" + meat)

}

protected void eat(String meat, String water){

System.out.println("Wolf eat:" + meat+ ", and drink: "+water)

}

}

Java基础- 重写,重构和重载的更多相关文章

  1. Java基础:多态(重载和重写)

    转载请注明出处:jiq•钦's technical Blog (1)域与静态方法 记住"仅仅有普通方法的调用是多态的". 而域和静态方法不是:对于域的訪问.在编译期间就已经进行解析 ...

  2. Java面向对象---重写(Override)与重载(Overload)

    一.重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说 ...

  3. Java方法重写与方法重载

    方法重载:发生在同一个类中,方法名相同方法形参列表不同就会重载方法. 方法重写:发生在继承当中,如果子的一个类方法与父类中的那个方法一模一样(方法名和形参列表一样),那么子类就会重写父类的方法. 方法 ...

  4. java中,重构、重载、重写

    1.什么叫重构? 答:重构(Refactoring)就是通过调整程序代码改善软件的质量.性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性,系统发展到一定阶段后,使用重构的方式,不改变系 ...

  5. Java基础--重写(Overriding,覆盖)-重载(Overloading)

    多态性: Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义.调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法 Java的方法重写, ...

  6. Java基础-重写方法

    一般我们需要在新类上重写,两个类的实现: class Animal{ public void move(){ System.out.println("动物可以移动"); } } c ...

  7. 黑马程序员——JAVA基础之函数,重载,内存结构

      ------- android培训.java培训.期待与您交流! ---------- 函数: 什么是函数? • 函数就是定义在类中的具有特定功能的一段独立小程序. • 函数也称为方法. 函数的格 ...

  8. 14.Java基础_函数/函数重载/参数传递

    Java函数和函数重载 /* 函数定义: public static 返回类型 func(参数){ 方法体: } 函数重载 在调用时,Java虚拟机会通过参数的不同来区分同名的函数 满足: 1.多个函 ...

  9. 三、java基础-方法含义_重载_递归

    1.java中方法: 方法的含义: 就是一个代码片段,可以完后某个特定的功能,可以重复利用: 定义方法的语法: [方法的修饰符列表]   方法的返回值类型   方法名{    java语句; } 注意 ...

随机推荐

  1. 使用GZIP压缩网页内容(一)

    在JDK中提供了GZIP压缩,来压缩网页的内容,降低网络传输时候的字节数,到达浏览器端的时候,再解压,GZIP压缩之后传输耗费的流量大大降低,但是同时也不会降低用户体验. package day04; ...

  2. js获取文件名和后缀名

  3. Linux基础——用户和用户组

    Linux基础--用户和用户组 一.用户和用户组 用户在/etc/passwd中 用户组在/etc/group/中注意:在创建用户时,系统默认生成一个用户组(组名和用户名一致) 1.用户 1.1查看用 ...

  4. JDK1.8源码(八)——java.lang.ThreadLocal类

    https://www.cnblogs.com/xdd666/p/14734047.html ThreadLocal https://www.cnblogs.com/yanfei1819/p/1473 ...

  5. JDK1.8源码(六)——java.util.ArrayList类

    ArrayList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了RandomAccess接口,支持快速随机访问,实际上就是通过下标序号进行快速访问,实现了Clonea ...

  6. ELK学习之Logstash+Kafka篇

    上一篇介绍了一下Logstash的数据处理过程以及一些基本的配置功能,同时也提到了Logstash作为一个数据采集端,支持对接多种输入数据源,其中就包括Kafka.那么这次的学习不妨研究一下Logst ...

  7. Easy-ARM IMX283 移植RTL8192CU驱动

    测试平台 宿主机平台:Ubuntu 12.04.4 LTS 目标机:Easy-ARM IMX283 目标机内核:Linux 2.6.35.3 无线网卡驱动下载地址:http://www.comfast ...

  8. Typora画各类流程图、甘特图、饼图等详细文档

    Draw Diagrams With Markdown August 15, 2016 by typora.io Typora supports some Markdown extensions fo ...

  9. 数据导出生成word附件使用POI的XWPFTemplate对象

    比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI和Java Excel.Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组 ...

  10. 样式和模板快速入门Style,Template

    http://www.cnblogs.com/jv9/archive/2010/04/14/1711520.html 样式(Style)和模板(Template)的定义 在Silverlight中,样 ...