java重写英文_Java重写重载的区别

本文介绍了Java中重载和重写的概念。重载发生在同一类中,方法名相同但参数列表不同;而重写发生在子类中,方法签名必须与父类完全相同。重写是运行时绑定,根据实际对象类型调用方法。文中通过实例代码展示了如何区分和使用这两种机制。
摘要由CSDN通过智能技术生成

4740344053c3d6ed28a02209e3502090.png

重载:指在一个类中定义多个方法名相同但参数列表不同的方法

“编译期绑定”,在编译时根据参数变量的类型判断应该调用哪个方法

重写:指在子类中定义中父类完全相同的方法

“运行期绑定”,在运行时根据引用变量指向的实际对象类型调用方法

方法重写的返回值类型如果是基本类型,应与父类的返回值类型一致

public class Father {

static int b=7;

int a=5;

public void say(){

System.out.println("父亲say");

}

public void write(){

System.out.println("父亲write");

}

}

public class Son extends Father {

static int b=9;

int a=4;

public void say(){

System.out.println("儿子say");

}

public void play(){

System.out.println("儿子play");

}

public static void main(String[] args) {

Father father=new Son();

father.say();

father.write();

// father.play();

System.out.println(father.a);

System.out.println(father.b);

Son son=new Son();

System.out.println(son.a);

System.out.println(son.b);

}

}

右边如果是一个子类对象,左边是父类引用,那么会自动向上转型为父类对象,如果右边是一个父类对象,左边是一个父类引用,那么必须向下强制转型为子类对象。

这本质是一个动态绑定,也就是说在编译期间无法确定具体类型,只有在运行期间才能确定具体类型,这里左边可以是一个接口或者是父类对象,右边是他的具体实现类,这样提供不同的实现类以实现父类存在或者接口中存在的方法已达到多态的目的。

子类向父类是自动转型,父类向子类是需要强制转型,这和基本类型之间的运算很相似,一个小类型会自动转化为大类型,但是大类型像小类型转化就需要强制转化,转化过程中可能出现精度损失,这类似于小盒子可以轻松放入大盒子,但是大盒子放入小盒子却需要一定转换一样。

如果是父类引用指向子类对象这种形式,有以下几种情况:

如果子类重写了父类的某个方法,那么此时调用的是子类重写的方法

如果子类没有重写父类的某个方法,那么此时调用的是父类中的方法

如果子类新增了父类中不存在的方法,那么这个父类引用是不能调用这个仅在子类中存在的方法中,因为子类对象自动向上转型为了父类对象

如果子类与父类有同名的成员变量和静态变量,那么由于子类自动向上转型为父类对象,此时调用father.a,那么输出的必然是父类的成员变量和静态变量,这里不存在子类覆盖父类同名变量这一说,因为这里本身可以看做是一个父类对象

如果是Son son=new Son(),那么这就是实实在在的一个子类对象,那么son.a和son.b,这样就会覆盖父类的同名变量,输出的是子类的成员变量a和静态成员变量b,如果子类中没有同名变量,那么son.a和son.b调用的是父类的a和b。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值