方法重载

重写和重载

不羁岁月 提交于 2019-12-16 10:44:47
关键字:重写、重载、super 一、方法的重写和重载是java多态性的不同表现,重写是父类之间多态性的一种表现,重载可以理解成多态的具体表现形式。 (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,(同名,不同参)。 (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,(同名,同参)。 二、方法重写:参数列表必须完全与被重写方法的相同。子类返回值必须与父类相同,除非是子类名。子类的访问权限不能比父类的访问权限更低。例如:如果父类的一个方法被声明为 protected,那么在子类中重写该方法就不能声明为 private。 class Animal {   public void move() {     System.out.println("动物可以动");   } }   class Dog extends Animal {     public void move() {       System.out.println("狗可以跑和走"); }   public static void main(String args[]) {     Animal a = new Animal(); // Animal 对象     Animal b = new Dog(); // Dog 对象

什么叫重载?

感情迁移 提交于 2019-12-16 04:38:57
简单来说:在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数和类型不同就行。 比如 public class overTest{ public void getSum(double d1,double d2){ } public void getSum(int i,int j){ } } 注意,参数交换位置也是一种重载。比如(string , int),(int, string)是一种重载。 来源: CSDN 作者: algo▪Tempest 链接: https://blog.csdn.net/weixin_43899266/article/details/103497237

Java - 重载和重写

大城市里の小女人 提交于 2019-12-15 16:03:37
Java中的重载以及重写 重载以及重写只能发生在方法中,其他的情况没有见过。但不包括以后会突然冒出来一个类或接口的一些什么玩法。这里我们只学习方法的重载以及重写。 1)重载 方法的重载:方法名相同,但是参数列表不同(决定性因素)。 在方法的重载中,只有参数列表是决定性因素,也就是只有参数能够决定方法的重载。 我们在学习Java中,很多时候会用到print()以及println()方法,仿佛这两个方法特别万能,什么都能够输出。其实在这里这两个方法是最典型的重载。 我们在此列出一些所重载的方法,如下: public void fun ( ) { } public void fun ( int a ) { } public void fun ( double ) { } //当重载方法之间有一种传参方法可以传入两个方法,则这两个方法都会报错, //具体是:在执行代码时,Java语言不知道执行的是哪一个代码。不定长参数可能会导致这种情况的发生。 public void fun ( String str1 , String str2 ) { } public void fun ( String . . . arg , String str ) { } //上述中加入主方法调用fun("wang","han"),上述这两个方法都可以调用,所以在编译的过程中就会报错。 public void

java面试题

痞子三分冷 提交于 2019-12-15 04:40:07
Java面试题(一) 1、面向对象的特征有哪些方面? 2、访问修饰符 public,private,protected,以及不写(默认)时的区别? 3、String 是最基本的数据类型吗? 4、float f=3.4;是否正确? 5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗? 6、Java 有没有 goto? 7、int 和 Integer 有什么区别? 8、&和&&的区别? 9、解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法。 10、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少? 11、switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上? 12、用最有效率的方法计算 2 乘以 8? 13、数组有没有 length()方法?String 有没有 length()方法? 14、在 Java 中,如何跳出当前的多重嵌套循环? 15、构造器(constructor)是否可被重写(override)? 16、两个对象值相同(x.equals(y) == true),但却可有不同的 hashcode,这句话对不对? 17、是否可以继承 String 类? 18

50道最新java基础部分面试题(二)

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-14 23:44:28
java基础部分面试题(前11题请看上一篇博客) 12、静态变量和实例变量的区别? 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。 例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticVar变量,并且每创建一个实例对象,这个staticVar就会加1;但是,每创建一个实例对象,就会分配一个instanceVar,即可能分配多个instanceVar,并且每个instanceVar的值都只自加了1次。 public class VariantTest{ public static int staticVar = 0; public int instanceVar = 0; public VariantTest(){ staticVar++; instanceVar++; System.out.println(“staticVar=” + staticVar + ”

java方法重载机制(overload)

本秂侑毒 提交于 2019-12-14 09:46:43
例子:求两个int、两个double、两个long数据的和,是否可以写一个方法,调用此方法,可以计算三组的和? 这种方法就是方法重载机制。( js不支持 )。 不用方法重载:三个方法写法:public static int sumint(int a, int b){return a+b;} public static double sumdouble(double a, double b){return a+b;} public static long sumlong(long a ,long b ){return a+b;} 调用:main(...){ sumint(1,2); sumdouble(1.2,3.4); sumlong(4l,3l); } 使用方法重载:三个方法写法: public static int sum(int a, int b){return a+b;} public static double sum(double a, double b){return a+b;} public static long sum(long a ,long b ){return a+b;} 调用:main(...){ sum(1,2); sum(4.6,3.5); sum(5l,6l); } 区别与联系:1:功能相似的方法,可以用重载机制,尽可能让方法名相同。功能不相似

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

点点圈 提交于 2019-12-14 01:53:14
重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写!返回值和形参都不能改变。即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。 在面向对象原则里,重写意味着可以重写任何现有方法。 实例如下: 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 类的方法 } } 结果: 动物可以移动 狗可以跑和走 在上面的例子中可以看到,尽管b属于Animal类型,但是它运行的是Dog类的move方法。

c++ 中的重载全局new,delete

馋奶兔 提交于 2019-12-13 14:39:38
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 最近做一个小项目,对c++又有很多新的理解。实在不的不让人发出感叹,c++太强大了,绝对不是一朝一夕就可以领悟她的内涵的。 首先我们要清楚,为什么我们要重载new,和delete了?这还不是指针造成的,确实指针是一件让人喜欢的东西,用起来如此让人喜欢,让人顺手。然而小程序我们完全可以避免内存泄露问题,大程序就不那么容易了,然而我们有一种特别好的方法可以跟踪我们new,和delete动作,找到未被释放的内存。办法是什么呢?微软给我们提供了一种很好的方法,那就是重载new,和delete。 在实现之前我们要清楚new,和delete的工作机理,这是个多么好的学习机会啊! 对与new操作符,其实和sizeof一样,都是c++内置的,然而像strlen就不是了,strlen属于函数。对于new的功能我们是没有办法改变的,当我们new一个对象时,new为我们做了两件事情,一、申请一块足够的内存空间供存放对象,对于new一个数组对象,编译器会计算出总共的空间,然后执行类似c语言中malloc函数类似的功能。二、初始化对象,对于单个对象,包括包括基本对象和类对象,可以通过括号初始化,比如int * pn = new int(3); A * pa = new A(3); 然而对于数组不能初始化,对于类对象

C++动态内存:(二)重载new和delete

别等时光非礼了梦想. 提交于 2019-12-13 14:36:57
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、重载的原因 用new创建动态对象时会发生两件事:(1)使用operatoe new()为对象分配内存(经常是调用malloc)(2)调用构造函数来初始化内存。相对应的调用delete运算符会(1)首先调用析构函数(2)调用operator delete()释放内存(经常是调用free)。我们无法控制构造函数和析构函数的调用,是由编译器调用的。但可以改变内存分配函数operator new()和operator delete()。链接:C++中的new/new[],delete/delete[] 使用了new和delete的内存分配系统是为了通用目的而设计的,但是在特殊的情形下并不能满足需要。最常见的改变分配系统的原因常常是出于效率考虑: (1)增加分配和归还的速度。创建和销毁一个特定的类的非常多的对象,以至于这个运算成了速度的瓶颈。 (2)堆碎片。分配不同大小的内存会在堆上产生很多碎片,以至于虽然内存可能还有,但由于都是碎片,找不到足够大的内存块来满足需要。通过为特定的类创建自己的内存分配器,可以确保这种情况不会发生。例如在嵌入式和实时系统里,程序可能必须在有限资源情况下运行很长时间,这样的系统就要求内存花费相同的时间且不允许出现堆内存耗尽或者出现很多碎片。 (3)检测运用上的错误。例如:new所得的内存

C++类或结构作为map的key值

心已入冬 提交于 2019-12-12 20:19:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1.只有重载<的类或者结构才能作为map的key值。 string可以作为key值是因为string重载了< 2.如果不重载<会提示如下错误: error C2676: 二进制“<”: “const C”不定义该运算符或到预定义运算符可接收的类型的转换 3.重载<但是没有实现会提示如下错误: Expression: invalid operator< 比如bool operator < (const C &c) const{return true;} #include < string > #include <map> using namespace std; // 重载<的类或结构才能作为map的key值 class C { public : int i; string str; bool operator < ( const C &c) const { return i < c.i; } }; void main() { map<C, int > mapC; C c0; c0.i = 0 ; c0.str = " str1 " ; mapC.insert(pair<C, int >(c0, 0 )); C c1; c1.i = 1 ; c1.str = " str2 " ; mapC.insert(pair