重载函数

java中重载(overload)与重写(override)的区别

浪子不回头ぞ 提交于 2020-02-01 11:40:12
方法重载(overload): 方法重载就是在一个类中可以创建多个方法,它们具有相同的名字,但是具有不同的参数和不同的定义,调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法,这就是多态性,重载的时候方法名一样,参数类型和个数不一样,返回值类型可以相同可以不同,可以有不同的访问修饰符,可以抛出不同的异常. 方法重写(override): 父类与子类之间的多态性,对父类的函数进行重新定义,如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写,在java中子类可以继承父类中的方法,而不需要重新编写相同的方法,但有时子类并不想原封不动地继承父类的方法,而是想做一定的修改,这就需要采用方法重写,方法重写又称方法覆盖 若子类中的方法与父类中的某一方法具有相同的方法名,返回类型,参数列表,则新方法将覆盖原有的方法,如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类 子类函数的访问修饰权限不能小于父类的 重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查性异常(父类的异常宽泛性比子类的广) 来源: https://www.cnblogs.com/xilichenbokeyuan/p/6385400.html

java 重写与重载

江枫思渺然 提交于 2020-02-01 11:33:29
一.方法重写: 参数列表必须完全与被重写方法的相同; 返回类型必须完全与被重写方法的返回类型相同; 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。 父类的成员方法只能被它的子类重写。 声明为final的方法不能被重写。 声明为static的方法不能被重写,但是能够被再次声明。 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。 构造方法不能被重写。 如果不能继承一个方法,则不能重写这个方法。 二.方法重载: 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。 最常用的地方就是构造器的重载。 重载规则 被重载的方法必须改变参数列表(参数个数或类型或顺序不一样); 被重载的方法可以改变返回类型; 被重载的方法可以改变访问修饰符;

[Java复习]重载、覆盖、继承、多态

久未见 提交于 2020-02-01 08:02:47
重载 :相同的方法名但是参数列表不同 覆盖 :方法名、参数列表、返回值完全相同、但是函数体内容不同。 继承 :子类使用父类的方法 多态 :是动态绑定。即 用基类的引用指向子类的对象。一个行为有不同的表现形式 举例: public class Dogs extends Animal{     public int Legs(){ //对父类方法的覆盖       return 4; } } public class Frogs extends Animal{     public int Legs(int i){ //对父类方法的重载        return i;     } } public class Animal{   public int Legs(){     return 0;   }   public int Legs(Dogs dog){ //重载     return 4;   }   public int Legs(Frogs frog){ //重载     return 0;   }   public void show(){     System.out.println("is animal");   } } public static void main(String[] args){   Dogs mydog = new Dogs(); mydog

函数重载-name mangling或mame decoration技术-看看反汇编

馋奶兔 提交于 2020-01-31 23:12:47
函数重载 文件-创建新项目-空项目 源文件-右键新建项-main.cpp #include <iostream> using namespace std; int main() { getchar(); return 0; } c语言不支持函数重载 C++支持函数重载 #include <iostream> using namespace std; int sum(int v1, int v2){ return v1 + v2; } int main() { cout << sum(10, 20) << endl; getchar(); return 0; } 现在希望sum函数多一些接收的参数 #include <iostream> using namespace std; int sum(int v1, int v2){ return v1 + v2; } int sum(int v1, int v2, int v3){ return v1 + v2 + v3; } int main() { cout << sum(10, 20) << endl; cout << sum(10, 20, 30) << endl; getchar(); return 0; } 两个函数的函数名一模一样,但是后面的参数或类型或顺序不同,称之为过程重载(函数重载) 实参的隐式转换会产生恶意性

Java 重写(Override)与重载(Overload)

╄→гoц情女王★ 提交于 2020-01-31 01:23:43
重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。 即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。 重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。 在面向对象原则里,重写意味着可以重写任何现有方法。实例如下: TestDog.java 文件代码: 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

2020-01-29

拜拜、爱过 提交于 2020-01-30 07:31:46
自己的一些面试总结 线程 多线程 线程的创建方式 1.继承Thread类创建线程 2.实现Runnable接口创建线程 3.使用Callable和future创建线程 4.使用线程池例如用Executor框架 线程怎么启动 Thread.start();//开启线程 Thread.run();当普通方法的方式调用 线程的状态(就绪、运行、阻塞、结束) 1.新建状态:当用new操作符创建一个线程时,线程还没有开始运行,此时线程处在新建状态 2.就绪状态:一个新创建的线程并不自动开始运行,要执行线程,必须调用线程start()方法。当线程对象调用start()方法即启动了线程,start()方法创建线程运行的系统资源,并调度线程运行run()方法。当start()方法返回后,线程就处于就绪状态 3.运行状态 当线程获取cpu时间后,他才进入运行状态,真正开始执行run()方法 4,阻塞状态:线程运行过程中,肯峨眉号各种原因进入阻塞状态; sleep方法进入睡眠状态 线程在等待某个触发条件 线程的同步 同步就是发出一个功能调试时,在没有得到结果之前,该调用就不返回或继续执行后续操作。 异步与同步相对,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作。 线程、进程的区别 线程和进程都是一个时间段的描述,是cpu工作时间段的描述。 进程的颗粒太大

C++-Record40—重写、重载、重定义三个概念的辨析

拥有回忆 提交于 2020-01-30 06:57:41
目录 概念定义 案例分析 总体代码 概念定义 函数重载: 必须在同一类中进行, 且子类无法重载父类的函数 ,父类同名函数将被 名称覆盖不会发生重载 ,重载是在编译期间根据参数类型和个数决定函数调用的。 函数重写: 必须发生于父类与子类之间,并且,父类与子类中的函数必须有 完全相同的 原型,使用virtual声明之后能够产生多态( 如果不使用virtual,那叫重定义 ),多态是在运行期间根据具体对象的类型决定函数调用的。 案例分析 本篇对重写、重载、重定义三个概念进行举例和辨析,先上案例,定义一个父类: class Parent { //这个三个函数都是重载关系 public: void abc() { printf("abc"); } virtual void func() { cout<<"func() do..."<<endl; } virtual void func(int i) { cout<<"func() do..."<<i<<endl; } virtual void func(int i, int j) { cout<<"func() do..."<<i<< " "<<j<<endl; } virtual void func(int i, int j, int m , int n) { cout<<"func() do..."<<i<< " "<<j<<endl;

C++ 重载重写重定义

最后都变了- 提交于 2020-01-28 03:07:28
重载(添加): 相同的范围(在同一个类中) 函数名字相同 参数不同 virtual关键字可有可无 重写(覆盖) 是指派生类函数覆盖基类函数,特征是: 不同的范围,分别位于基类和派生类中 函数的名字相同 参数相同 基类函数必须有 virtual 关键字 重定义(隐藏) 是指派生类的函数屏蔽了与其同名的基类函数,规则如下: 如果派生类的函数和基类的函数同名,但是参数不同,此时,不管有无 virtual ,基类的函数被隐藏。 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有 vitual 关键字,此时,基类的函数被隐藏。 注意: 当发生重定义时,子类函数会覆盖父类同名函数,此时无法通过子类对象直接调用父类同名函数;但可以通过域作用符 :: 显式地调用父类同名函数 来源: CSDN 作者: banjitino 链接: https://blog.csdn.net/Ai_King/article/details/104065760

C++第8课--函数重载分析(上)

左心房为你撑大大i 提交于 2020-01-26 22:26:55
本文学习自 狄泰软件学院 唐佐林老师的 C++课程 实验1:函数重载使用 实验2:函数默认参数 VS 函数重载 ------> 产生冲突 实验3:函数重载的本质 实验1:函数重载使用 #include <stdio.h> #include <string.h> int func(int x) { return x; } int func(int a, int b) { return a + b; } int func(const char* s) { return strlen(s); } int main(int argc, char *argv[]) { printf("%d\n", func(3)); printf("%d\n", func(4, 5)); printf("%d\n", func("D.T.Software")); return 0; } mhr@ubuntu:~/work/c++$ g++ 8-1.cpp mhr@ubuntu:~/work/c++$ ./a.out 3 9 12 mhr@ubuntu:~/work/c++$ 实验2:函数默认参数 VS 函数重载 ------> 产生冲突 #include <stdio.h> int func(int a, int b, int c = 0) { return a * b * c; } int func

java学习笔记--重载

╄→尐↘猪︶ㄣ 提交于 2020-01-26 02:04:34
package myJavaNotes; /** *@author 康爸爸 *@date: 2020年1月24日 上午02:17:38 * */ public class MethodOverloading { public static void main(String[] args) { // TODO Auto-generated method stub /*方法:一段用来完成特定功能的代码片段,类似于其他语言的函数 方法声明格式: [修饰符1 修饰符2 ....] 返回值类型 方法名(形式参数){ java语句块; ...... } 方法的调用: 对象名.方法名(实际参数列表) * */ /* 形式参数:在方法声明时用于接收外界传入的数 * 实际参数:调用方法时实际传给方法的数据 * 返回值:方法在执行完毕后返回给调用它的环境的数据 * 返回值类型:事先约定的返回值数据类型,如:无返回值,必须显示指定为void * * */ //通过对象调用普通方法:需要类先new一个对象,通过对象调用方法 MethodOverloading mol = new MethodOverloading(); int sum1 = mol.add(1,2);//先用类new对象,通过对象调用方法 System.out.println(sum1); int result1 = sub(5,2);/