java中重载、覆盖和隐藏三者的区别分析

卖情趣的小女孩

卖情趣的小女孩

2016-02-19 10:06

有了下面这个java中重载、覆盖和隐藏三者的区别分析教程,不懂java中重载、覆盖和隐藏三者的区别分析的也能装懂了,赶紧get起来装逼一下吧!

重载:方法名相同,但参数不同的多个同名函数

  注意:1.参数不同的意思是参数类型、参数个数、参数顺序至少有一个不同

     2.返回值和异常以及访问修饰符,不能作为重载的条件(因为对于匿名调用,会出现歧义,eg:void a ()和int a() ,如果调用a(),出现歧义)

     3.main方法也是可以被重载的

覆盖:子类重写父类的方法,要求方法名和参数类型完全一样(参数不能是子类),返回值和异常比父类小或者相同(即为父类的子类),访问修饰符比父类大或者相同

   两同两小一大

    注意:子类实例方法不能覆盖父类的静态方法;子类的静态方法也不能覆盖父类的实例方法(编译时报错),总结为方法不能交叉覆盖

隐藏:父类和子类拥有相同名字的属性或者方法时,父类的同名的属性或者方法形式上不见了,实际是还是存在的

  注意:当发生隐藏的时候,声明类型是什么类,就调用对应类的属性或者方法,而不会发生动态绑定

      方法隐藏只有一种形式,就是父类和子类存在相同的静态方法

      属性只能被隐藏,不能被覆盖

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

      子类实例变量/静态变量可以隐藏父类的实例/静态变量,总结为变量可以交叉隐藏

隐藏和覆盖的区别:

  被隐藏的属性,在子类被强制转换成父类后,访问的是父类中的属性

  被覆盖的方法,在子类被强制转换成父类后,调用的还是子类自身的方法

  因为覆盖是动态绑定,是受RTTI(run time type identification,运行时类型检查)约束的,隐藏不受RTTI约束,总结为RTTI只针对覆盖,不针对隐藏

特殊情况:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  1.final修饰的属性可以被隐藏,但是不能被赋值,即不能用=来赋值,网上说final属性不能被修改,这个说法不准确,因为对于引用类型的变量用final修饰后,它只是不能被指向其他对象,但是可以改它自身的值,可以用ArrayList测试,final属性可以在运行的时候进行初始化,但是不能不出现初始化语句

  2.final修饰的方法不能被覆盖,可以被重载

  3.final修饰的类不能被继承

  4.private 方法隐式添加了final

展开更多 50%)
分享

猜你喜欢

java中重载、覆盖和隐藏三者的区别分析

编程语言 网络编程
java中重载、覆盖和隐藏三者的区别分析

Java方法的覆盖与隐藏的区别分析

编程语言 网络编程
Java方法的覆盖与隐藏的区别分析

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

java中instanceof和getClass()的区别分析

编程语言 网络编程
java中instanceof和getClass()的区别分析

java中Hashtable和HashMap的区别分析

编程语言 网络编程
java中Hashtable和HashMap的区别分析

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

innerHTMLouterHTML,innerTEXT三者之间的区别

Web开发
innerHTMLouterHTML,innerTEXT三者之间的区别

纹眉 绣眉和飘眉三者的区别

纹眉 绣眉 整形
纹眉 绣眉和飘眉三者的区别

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

U盘大小变为0字节怎么办

U盘大小变为0字节怎么办

win10系统如何显示照片缩略图?

win10系统如何显示照片缩略图?
下拉加载更多内容 ↓