java什么是方法 重载 重写?什么是java方法重载
老铁们,大家好,相信还有很多朋友对于java什么是方法 重载 重写和什么是java方法重载的相关问题不太懂,没关系,今天就由我来为大家分享分享java什么是方法 重载 重写以及什么是java方法重载的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
JAVA方法重写和重载的区别
重载 overloading
1)方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载是一个类中多态性的一种表现。
2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型给它们的不同参数个数和参数类型给它们的不同参数个数和参数类型来决定具体使用哪个方法,这就是多态性。
3)重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。
例子package c04.answer;//这是包名//这是这个程序的第一种编程方法,在main方法中先创建一个Dog类实例,然后在Dog类的构造方法中利用this关键字调用不同的bark方法。不同的重载方法bark是根据其参数类型的不同而区分的。//注意:除构造器以外,编译器禁止在其他任何地方中调用构造器。package c04.answer; public class Dog{ Dog(){ this.bark();} void bark()//bark()方法是重载方法{ System.out.println("no barking!"); this.bark("female", 3.4);} void bark(String m,double l)//注意:重载的方法的返回值都是一样的,{ System.out.println("a barking dog!"); this.bark(5,"China");} void bark(int a,String n)//不能以返回值区分重载方法,而只能以“参数类型”和“类名”来区分{ System.out.println("a howling dog");} public static void main(String[] args){ Dog dog= new Dog();//dog.bark();//dog.bark("male","yellow");//dog.bark(5,"China");
重写overriding
1)父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
3)子类函数的访问修饰权限不能少于父类的;
例子public class Base
{
void test(int i)
{
System.out.print(i);
}
void test(byte b)
{
System.out.print(b);
}
}
public class TestOverriding extends Base
{
void test(int i)
{
i++;
System.out.println(i);
}
public static void main(String[]agrs)
{
Base b=new TestOverriding();
b.test(0)
b.test((byte)0)
}
}
这时的输出结果是1 0,这是运行时动态绑定的结果。
总结:重载和重写(覆盖)
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,
将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了,而且如果子类的方法名和参数类型和个数都和父类相同,那么子类的返回值类型必须和父类的相同;如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载。Overloaded的方法
是可以改变返回值的类型。也就是说,重载的返回值类型可以相同也可以不同。
附录:动态绑定即调用对象方法的机制
1)编译器检查对象声明的类型和方法名,从而获取所有候选方法。试着把上例Base类的test注释掉,这时再编译就无法通过。
2)重载决策:编译器检查方法调用的参数类型,从上述候选方法选出唯一的那一个(其间会有隐含类型转化)。如果编译器找到多于一个或者没找到,此时编译器就会报错。试着把上例Base类的test(byte b)注释掉,这时运行结果是1 1。
3)若方法类型为priavte static final,java采用静态编译,编译器会准确知道该调用哪个方法。
4)当程序运行并且使用动态绑定来调用一个方法时,那么虚拟机必须调用对象的实际类型相匹配的方法版本。在例子中,b所指向的实际类型是TestOverriding,所以b.test(0)调用子类的test。但是,子类并没有重写test(byte b),所以b.test((byte)0)调用的是父类
的test(byte b)。如果把父类的(byte b)注释掉,则通过第二步隐含类型转化为int,最终调用的是子类的test(int i)。
在Java中,方法重写和方法重载有什么区别
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
什么是java方法重载
覆盖是override方法重写重载是overload
按照教科书上的定义,重载就是具有相同函数名,返回类型可以不同,参数个数、顺序、类型不同的函数。我的理解是重载是发生在两个或者是更多的函数具有相同的名字的情况下。
重写就是覆盖父类的方法,和父类有相同返回类型,参数,甚至是抛出的异常,重写方法不能为private,运用中最典型的就是对接口方法的覆盖。方法的重写Overriding和重载Overloading是Java多态性的不同表现.
重写Overriding是父类和子类之间多态性的一种表现;如果在子类中定义某方法和其父类有相同的名称和参数,我们说该方法被重写(Overriding).子类的对象使用这个方法时,将调用子类中的定义,对他而言,父类中的定义如同被"屏蔽"了.
重载Overloading是个类中多态性的一种表现;如果在一个类中定义了多个同名的方法,他们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading).重载的方法是能改动返回值的类型.
现实例子:你对比上面看,比如一老爹是木工。儿子继承老爹也是木工。
老爹有个做柜子的独特技术(方法),只需要用到工具锤子和木头(参数),
儿子根据老爹这个做柜子的技术延伸出很多种技术,他懒得再起名就也对外宣称叫做柜子独特技术。
1个继承自老爹,相同的方法名,相同的工具,但有自己的想法,工序有改动。儿子做木工活用到这个技术方法的话就叫重写。
另外的自创,但也叫做柜子独特技术,但用工具不同有:
木头。(儿子牛,不用锤子照样做柜子。。。)
锯子,木头。(也是木头柜子)
锤子,铁皮。(铁皮柜子)
以上3中为重载。
明白?不明白给我发消息。呵呵~
方法重载和重写的区别
Overload是重载的意思,表示在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可,Override是覆盖的意思,也就是重写,它与返回值类型无关,只看参数列表,两者不同主要体现在:目的不同、范围不同、参数不同、多态性不同、返回类型不同。
1、目的不同
overload用于增加程序的可读性(做法不同,但是做的同一事情)。 override用于提供其超级类已经提供的方法的特定实现。
2、范围不同
overload在相同的类范围内内执行。 override发生在两类具有继承(继承)的关系。
3、参数不同
overload参数必须不同。 override参数必须相同。
4、多态性不同
overload静态多态,调用的函数在编译时被选中。 override是运行时多态性的。
5、返回类型不同
overload中可以相同或不同。但你必须改变参数。 override必须是相同的或协变的。
参考资料来源:
百度百科-overload
百度百科-override
好了,文章到这里就结束啦,如果本次分享的java什么是方法 重载 重写和什么是java方法重载问题对您有所帮助,还望关注下本站哦!