重写与重载、静态绑定与动态绑定(早绑定与晚绑定)
创作时间:
作者:
@小白创作中心
重写与重载、静态绑定与动态绑定(早绑定与晚绑定)
引用
CSDN
1.
https://blog.csdn.net/Yuan_o_/article/details/139005123
本文将深入探讨Java中的重写与重载、静态绑定与动态绑定的概念和区别。通过详细的规则说明、代码示例和对比分析,帮助读者理解这些概念。
重载(Overload)
重载是指在一个类中可以有多个方法具有相同的名字,但这些方法的参数不同(参数的类型和个数不同)。
重载规则:
- 同一个类
- 方法名相同
- 参数列表不同(包括:类型、个数、顺序)
重写(Override)
重写是指在继承关系中,子类对父类的方法进行重新定义。具体规则如下:
- 必须在继承关系中
- 方法名相同
- 参数列表相同
方法重写的规则:
- 子类在重写父类的方法时,必须与父类的返回值类型、方法名、参数列表要完全一致
- 返回值(JDK7 以后,被重写的方法返回值类型可以不同,但是必须是具有父子关系的)
- 访问权限不能比父类中被重写的方法的访问权限更低,如:父类方法被 public 修饰,则子类中重写该方法就不能声明为 protected
- 父类中被 static、private 修饰的方法、构造方法都不能被重写
- 重写的方法可以使用
@Override
注解来显式指定,该注解可以帮我们进行一些合法性校验
重写与重载的区别
- 方法重载是一个类的多态性表现
- 方法重写是子类与父类的一种多态性表现
重写的设计原则
对于已经投入使用的类,尽量不要进行修改,最好的方式是重新定义一个新的类,来重复利用其中共性的内容,并且添加或改动新的内容。
IDEA重写快捷键
静态绑定
静态绑定也称为前期绑定(早绑定),即在编译时,根据用户所传递实参类型就确定了具体调用那个方法,如:函数重载。
动态绑定
动态绑定也称为后期绑定(晚绑定),即在编译时,不能确定方法的行为,需要等到程序运行时,才能够确定具体调用那个类的方法。
演示所用代码
// Test 类
public class Test{
public static Animal func(){
Cat cat = new Cat();
return cat;
}
public static void main(String[] args){
Animal animal = func();
}
}
public class Test{
public static void main(String[] args) {
Animal animal = new Cat();
if(animal instanceof Dog){
Dog dog = (Dog) animal;
dog.bark();
}else{
System.out.println("向下转型失败!");
}
}
}
public class Test{
public void func(int x){
}
public void func(int x,int y){
}
public static void main(String[] args) {
Animal animal = new Cat("喵喵");
animal.eat();
}
}
public class Test{
public static void func(int x){
}
public static void func(double x){
}
public static void func(int x,double y){
}
public static void func(double y,int x){
}
public static void main(String[] args) {
func(100,3.14);
}
}
// Animal 类
public class Animal {
String name;
private int age;
public Animal(String name) {
this.name = name;
}
public void eat(){
System.out.println(name + " 正在吃饭!");
}
}
// Dog 类
public class Dog extends Animal{
public Dog(String name) {
super(name);
}
public void eat(){
System.out.println(name + " 正在吃骨头!");
}
public void bark(){
System.out.println(name + " 正在汪汪叫!");
}
}
// Cat 类
public class Cat extends Animal{
public Cat(String name) {
super(name);
}
@Override
public void eat(){
System.out.println(name + " 正在吃鱼!");
}
}
热门推荐
专家详解:如何通过饮食预防黑便?
脾胃虚寒者是否适合饮用朱雀汤?
《哪吒之魔童闹海2》:中国神话的现代演绎
《哪吒之魔童闹海2》:宿命与抗争的哲学思考
新年餐桌必备:如何挑选新鲜海鱼?
鱼料理达人教你海鱼烹饪绝技
你真的会用多西环素吗?
1976年两分钢镚值多少钱?最新市场价格和收藏价值分析
风水与建筑:能量流动与空间设计的奥秘
“花鸟使”“县主”是什么,李现杨紫《国色芳华》背后有啥历史来头?
海口警方发布最新预警:这五类诈骗电话要当心
动漫枪械画法攻略:让角色手持武器时也显得格外帅气!
《老枪》:一把沉默的老枪,一段时代的记忆
从北大走出的两位创业传奇:李彦宏与李革
从“国脸”到春晚主持人:欧阳夏丹的央视高光时刻
北京大学跃居QS世界大学排名第17位:学术实力与国际影响力持续攀升
蔡元培:如何改变北大命运?
北大的科研成果如何改变我们的生活?
冬季多肉植物浇水攻略:防冻又保湿!
给多肉浇水也能发Science?揭秘若绿的神奇液体传输机制
重庆交通茶馆:探秘涂鸦街旁的八十年代老茶馆,网红打卡与文化体验并重
美食与科学:解析食材背后的营养与健康
自贡彩灯:历史遗产的保护与传承
关于保全裁定复议是否可上诉的若干问题探讨
白内障老人的娱乐指南:Switch游戏、老电影还是棋牌游戏?
哈尔滨医大二院推荐:白内障术后护理全攻略
老年人如何科学应对白内障?这份指南请收好
邯郸经济崛起:高新技术产业成新引擎
米其林三星餐厅推荐:红烧狮子头
秋冬感冒高发季,盐酸多西环素如何正确使用?