网站备案 地域,网上商城网站开发需求说明书,江苏省城乡建设局网站首页,关于做花茶网站的策划书在java编程中经常会遇到重载和重写#xff0c;刚接触java的时候对这对概念比较懵比#xff0c;也不能理解其中的区别#xff0c;后来在逐渐的学习中更加深刻的理解了其中的原理。哎#xff0c;说来还是基础知识学的不扎实#xff0c;这些都是大学期间偷懒欠下的帐。 …在java编程中经常会遇到重载和重写刚接触java的时候对这对概念比较懵比也不能理解其中的区别后来在逐渐的学习中更加深刻的理解了其中的原理。哎说来还是基础知识学的不扎实这些都是大学期间偷懒欠下的帐。 一简单理解 1.重载是在一个类中有多个名称一样的方法需要根据参数来辨识运行时使用哪个方法。在java中同一个类的同名方法的重载仅依赖(1)参数类型、(2)参数个数、(3)参数顺序三者决定。与返回类型函数修饰符都无关。
2.重写是多个类继承于同一父类并同时实现了父类的方法这时我们在利用父类上转型引用子类并调用接口时jvm会帮我们执行子类实现的方法逻辑。举个栗子如下
class Animal{public void move(){System.out.println(动物可以移动);}
}class Dog extends Animal{public void move(){System.out.println(狗可以跑和走);}
}public class TestDog{public static void main(String args[]){Animal a new Animal(); // Animal 对象Animal b new Dog(); // Dog 对象a.move();// 执行 Animal 类的方法b.move();//执行 Dog 类的方法}
}二深入理解 java代码在经过javac编译后成为class文件然后会通过类加载器加载进入内存。加载类文件的过程是由虚拟机外部用户自定义的类装载器实现的我们常用的就是tomcattomcat会将class类文件装载进内存然后由虚拟机进行验证、准备、解析、初始化等操作。class文件中包含逻辑代码生成的字节码及很多常量池引用组成的元数据。我们在进行方法调用时实际上目标方法在class文件中就是一个对常量池的符号引用。们需要将这个符号引用转为直接引用这个过程是jvm在解析过程中实现的。我们的重载和重写就是从解析开始的接下来我们仔细介绍类的解析及方法的分派过程。
1方法调用的解析过程 我们代码中对外部类方法的调用一开始都是简单的符号引用虚拟机在类加载阶段会自动帮我们进行对符号引用的解析。这个过程可能在类加载期进行也可能在运行时进行主要是为了实现java的动态分派这个之后说。类加载阶段的解析只能针对类的静态方法、私有方法和final方法进行因为这些方法在运行期都是不会发生变化的其他类型的方法可能被子类继承并重写我们无法在类加载时就确定其直接引用。
2方法的分派 方法的分派包含静态分派和动态分派重载出现在静态分派的过程中而重写出现在动态分派的过程中。 1.当我们的方法调用在解析过程中找到对应的类后发现对应的类中有很多同名的方法这时会根据方法调用时使用的参数类型称为静态类型来判定使用哪个函数然后将依赖类进行加载和初始化并将符号引用转为这个类方法的内存地址这个过程就叫做静态分派。 2.当程序运行后在方法调用的解析过程中发现代码声明的类和运行时引用类不同时会根据实际引用类的地址去寻找实际引用类的方法列表中寻找是否有相应方法这个过程叫做动态分派例如有个Son类继承了父类Father类并实现了父类的run方法然后我们执行 Father sonRun new Son(); sonRun.run();这个过程便是动态分派的过程动态分派只能在运行期不能根据静态类型(Father类)确定方法的内存地址只能在在操作数栈中找到实际类型。