java类和对象之方法重写

目录

1.认识方法重写

2.方法重写的规则

3.方法重写的一些注意事项

 4.方法重写与方法重载的区别

5.动态绑定与静态绑定

1.静态绑定

2.动态绑定

1.认识方法重写

在认识方法重写之前,我们先来看一段代码:

父类Animals
class Animals{
    String name;
    int age;
     public void eat(){
        System.out.println("正在吃饭");
    }
}
子类Dog
class Dog extends Animals{
    ...
}
子类Cat
class Cat extends Animals{
    ...
}

还是一样,创建了一个父类Animals,两个子类Dog(狗)和Cat(猫),父类里面的eat()成员方法,可以供两个子类使用,但是,不论是狗还是猫,都是吃饭吗??你别忘了,狗是吃狗粮的,猫是吃猫粮的,我都去调用同一个eat(),就不太好了,那怎么办呢?

那我就在子类里面重写一个eat()方法呗,如下

动物
class Animals{
    String name;
    int age;
     原本的eat()
     public void eat(){
        System.out.println("正在吃饭");
    }
}

class Dog extends Animals{
    在子类里重写eat()
    public void eat(){
        System.out.println("吃狗粮");
    }
}

class Cat extends Animals{
    重写eat()
    public void eat(){
        System.out.println("吃猫粮");
    }
}

我在子类里重写了一遍eat方法,我现在调用一下,

这里我为了简洁,省略了main方法

Dog dog1 = new Dog();
Cat cat1 = new Cat();
dog1.eat();
cat1.eat();

运行的结果为:

你发现,我在子类里重写了父类的eat()方法后,我再去调用,调用的是重写后的方法,这就是方法重写,方法重写也叫方法覆盖,意思就是子类重写父类的方法,让子类对象调用该方法的时候,调用的是重写后的方法

2.方法重写的规则

(1).方法名,参数列表,返回值必须要相同

(2).方法的内容可以不同

3.方法重写的一些注意事项

(1).被private、static、final修饰的方法不能被重写,还有构造方法也不能被重写

(2).子类的访问权限一定要大于等于父类的访问权限

如图:

 (3).返回值其实可以不同,但必须是父子类关系

如图

当不是父子类关系时

当是父子类关系时

总的来说,你的重写之后返回值类型,要么相同,要么和原来的返回值类型成父子类关系

(4).@Override注释的使用

在重写的方法前面加上这行注释,当你出现一些低级错误时,比如方法名写错了等等,编译器自动会报错,让你很容易就会发现,例如:

 4.方法重写与方法重载的区别

方法重写的方法名、参数列表(参数个数、参数顺序、参数类型)、返回值类型(除了具有父子类关系的类型)必须都要相同

方法重载只需要方法名相同、其余都可以不同,而且至少要有一样不同

5.动态绑定与静态绑定

1.静态绑定

静态绑定是在编译时确定对象的类型和绑定的方法,编译器会根据调用的方法名和对象的类型确定要调用哪个方法。这种绑定方式在程序运行时效率高,但缺点是不够灵活,无法处理对象的多态性。

静态绑定的一个典型例子就是方法重载,在编译代码的时候,编译器就会根据重载的几个方法的参数列表和返回值类型来判断,我要调用的是哪个方法,简单来说就是编译时绑定。

2.动态绑定

动态绑定则是在运行时根据对象的实际类型确定要调用哪个方法,能够处理对象的多态性。动态绑定通常需要使用虚函数或接口实现。在动态绑定中,编译器不知道要调用哪个方法,而是在程序运行时根据对象的实际类型进行绑定。

动态绑定的典型例子就是方法重写,在编译代码的时候,不确定要调用哪个方法,只有到了运行的时候,才能够确定具体要调用的那个方法,简单来说就是运行时绑定。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值