问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Java语言中隐藏,覆盖,重载的含义!

发布网友 发布时间:2022-04-22 11:28

我来回答

6个回答

热心网友 时间:2023-07-06 07:42

多态性
通过继承,一个类可以用作多种类型:可以用作它自己的类型、任何基类型,或者在实现接口时用作任何接口类型。这称为多态性

重载
每个类型成员都有一个唯一的签名。方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成。只要签名不同,就可以在一种类型内定义具有相同名称的多种方法。当定义两种或多种具有相同名称的方法时,就称作重载。即重载时相同名称成员的参数列表是不相同的(参数顺序和类型)。

继承,重写和隐藏成员
派生的类型继承其基本类型的所有成员;也就是说,这些成员是在派生类型之上定义的,并可用于派生类型。继承成员的行为和质量可以通过以下两种方式来修改:

1、派生类型可通过使用相同的签名定义一个新成员,从而隐藏继承的成员。将先前的公共成员变成私有成员,或者为标记为 final 的继承方法定义新行为时,可以采取这种方法。

2、派生类型可以重写继承的虚方法。重写方法提供了对方法的一种新定义,将根据运行时的值的类型,而不是编译时已知的变量类型来调用方法。只有当虚方法没有标记为 final 且新方法至少可以像虚方法一样进行访问的情况下,成员才能重写虚方法。
方法名,参数相同形成重写,重写的方法不能降低原方法的"可见度",也不能改变原方法的返回值类型。

方法名相同,参数不同(个数、类型)形成重载,重载的方法可看成一个全新的方法,与原方法相比它可以有不同的"可见度"和“返回值类型”。如下例:

class A {
protected int method1(int a, int b) { return 0; }
}
public class B extends A{
public int method1(int a, int b) { return 0; } //正确,重写父类方法,可以扩大访问权限
//private int method1(int a, int b) { return 0; } //错误,重写父类方法,不能降低了访问权限
//private long method1(int a, int b) { return 0; } //错误,重写父类方法,不能改变返回值类型
public short method1(int a, long b) { return 0; }//正确,重载自身的方法,可以有不同的访问权限和返回值类型
private int method1(int a, long b) { return 0; }//正确,重载自身的方法,可以有不同的访问权限和返回值类型
}

但这里 方法public short method1(int a, long b) { return 0; }和 方法private int method1(int a, long b) { return 0; }不能同时存在,因为在同一类中,不允许存在相同名字和参数类型的方法(重写的方法)。

override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。在覆盖要注意以下的几点:
1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。在使用重载要注意以下的几点:
1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int));
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;
4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
下面是对override和overload的测试程序,其中注释中的内容都是会产生编译错误的代码,我们将注释去掉,看看在编译时会产生什么效果。
//对overload测试的文件:OverloadTest.java
publicnewOverrideTest1();
try{
test.fun();
test.fun1();
}catch(Exceptione){}
}
}

classOverrideTest1extendsOverrideTest{
//以下正常Override
publicvoidfun()throwsTestException2{
System.out.println("funinOverrideTest1");
}

//不能Override父类中的方法,因为它定义了不同的异常类型和
//返回值。
//publicintfun()throwsTestException1{
//System.out.println("methodfuninTest");
//return1;
//}

//不能Override父类中的方法,因为它抛出了比父类中非法范围
//更大的异常。
//publicvoidfun()throwsException{
//System.out.println("funinOverrideTest1");
//}

//这个方法并没有Override父类中的fun1方法,因为这个方法在
//父类是private类型,所以这里只是相当于定义了一个新方法。
publicvoidfun1(){
System.out.println("methodfun1inTest");
}
}

classTestExceptionextendsException{
publicTestException(Stringmsg){
super(msg);
}
}

classTestException1extendsTestException{
publicTestException1(Stringmsg){
super(msg);
}
}

classTestException2extendsTestException{
publicTestException2(Stringmsg){
super(msg);
}

热心网友 时间:2023-07-06 07:43

想及格请参看:
http://hi.baidu.com/longchengjiang/blog/item/57616a82baea94a10cf4d2d2.html

http://hi.baidu.com/lzycsd/blog/item/0f29e45c67f1cb45fbf2c0b7.html

热心网友 时间:2023-07-06 07:43

东西太多了,几句话说不完,从网上找了几个,先看看!

http://zhidao.baidu.com/question/23868535.html 讲 封装,继承,多态的

http://hi.baidu.com/nijian49508490/blog/item/42d08c76b94b8f1cb051b9db.html 讲 重载,覆盖的

热心网友 时间:2023-07-06 07:44

通俗的讲给你听,这样容易理解。

继承:A类继承B类,这样A类就有了B类的所有方法和属性(private,私有成员除外)。
就像是父子关系的遗传一样,但是父亲也有自己的隐私的嘛。

(覆盖?)重写:有了继承才谈得上重写,这表示子类继承了父类的方法,拥有相同的名字和参数。此时子类可以用自己的代码实现来代替父类。这样在父类的基础上有了自己的特色。
如,父子都有吃饭这个方法,但是子却可以将吃饭重新定义他的行为。

重载:区别于重写,重载是发生在同一个类里面,拥有相同的方法名,但是方法的参数不同。(参数个数,参数类型不同)。比如有个running方法,当你传int型和String型时,会进入不同的方法体。

重载,重写也是java多态很重要,基本的性质,这样大大丰富了java的表达能力。

对了,封装,其实没什么,就是把一大堆的属性,方法打个包,这样大颗粒的,方便传递等。这个包就是类。

以上为自己的见解。。。

热心网友 时间:2023-07-06 07:45

我强调一下。
如果网上都有含义,而且既然考试哪里有不发书的?
方法是抄。

热心网友 时间:2023-07-06 07:45

隐藏?没听说过
覆盖?没听说过
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
“泛览周王传”的出处是哪里 避事的意思是什么 怠息的意思是什么 “偷闲来此一嚬呻”的出处是哪里 怠息意思和来源是什么 客厅中间沙发旁旁边放什么 客厅沙发旁边放什么合适 沙发左右摆什么位置 淘宝网无法注册邮箱验证 谁能帮我注册一个谷歌帐号,我一直注册不成功,淘宝上也买不到,在线等... 有关java中覆盖和隐藏的问题 java中重载,覆盖和隐藏的区别 语音备忘录能发送几分钟? JAVA多态中的隐藏和覆盖 java中类的覆盖和隐藏的区别 Java中属性的隐藏与方法的覆盖的区别 JAVA方法的覆盖与域的隐藏有何不同? 求个加勒比女海盗1、2、3的链接 torrentkitty怎么用torrentkitty怎么进入 听说有个女版的奥特曼(红色的),谁有地址或种子? 这是blaire ivory的哪一部啊? 只有视频的截图怎么查磁力链接 什么求组词 永不磨灭的番号全集哪里可以下载 你给个链接 哪个网站有 永不磨灭的番号 的全集看啊 永不磨灭的番号在线观看,不用下载的直接能看的! 永不磨灭的番号18集19集20集第18集19全集高清播放地址 跪求番号007(DJ版)mp3百度云链接 隐藏磁力链接怎么搜 请教个问题,Java中属性的隐藏与方法的覆盖,求详解. Java中隐藏与覆盖的区别 请问java是用什么方式实现继承,覆盖、隐藏的。 java 隐藏和 覆盖怎么感觉是一样的?(菜鸟!!在线) JAVA成员变量隐藏和方法的覆盖 C#和Java 方法重写和覆盖隐藏的区别 方法隐藏和方法覆盖的区别和用法 Java将多个sheet展示在一个sheet中?怎么做? java中 什么叫隐藏 java中 什么是隐藏?什么是重写?二者有何区别? java里的重写,重载,覆盖的区别? JAVA程序中封装与隐藏是什么意思 心有灵犀是什么意思? 心有灵犀的意思 心有灵犀什么意思? 心有灵犀是什么意思 什么叫心有灵犀? 心有灵犀的意思是什么? 心有灵犀什么意思? 心有灵犀,下句是什么?