问答文章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

我来回答

3个回答

热心网友 时间:2023-07-25 19:09

所谓父类静态方法在子类重新定义会被隐藏,指的实际上应该是静态方法,在子类中既不能被重写,也不能被重载。

所谓静态方法被隐藏应该类似于重写的作用,因为重写也是类似于隐藏了父类的那个方法。

实际上静态方法一般不存在被隐藏的问题,因为如果两个类有继承关系,并且两个类都有各自的一个静态方法(名称相同,参数,返回都相同),那么如果这时候从外部调用这两个类的静态方法,因为需要加上类名,所以不会重复,比如
class A{static void meth1(){}} class B extends A{static void meth1(){}}
class C
{
public static void main(String[] args)
{
A.meth1();
B.meth1();//从外部调用静态方法不存在隐藏。
}
}
如果从内部调用,那么就存在隐藏了,实际上就是和重写差不多吧。
class A{static void meth1(){}}
class B extends A
{
static void meth1(){}
public static void main(String[] args)
{
meth1(); //这里调用的是哪一个呢? 调用的是自身的,父类的被隐藏了。
}
}
下面来说下重写和重载

所谓重写和重载的最大的区别是:方法参数是否能改变。

例如重写:
class A
{
void Meth1(int i){}
}
class B extends A
{
void Meth1(int i){}
}
这就是重写,方法所接收的参数并没有改变。而当我创建一个对象去调用这个方法时,根据对象的不同,调用的方法将不同。例:
class C
{
public static void main(String[] args)
{
B x11=new B(); //创建一个b的对象
x11.Meth1(); //这时候调用的实际上就是B类的meth1,父类的meth1被
//隐藏了。
A x12=new A();
x12.Meth1(); //这时候调用的methe1就是A的methe1了
}
}

而改变方法参数的就是重载。例
class A
{
void Meth1(int i){}
}
class B
{
void Meth1(float j){}
}
这时候就是重载,可以看到,方法所需要的参数改变了。而这个时候,创建对象,调用者两个方法,一是看对象是哪个类的对象,二是看调用时候传递的参数是什么来决定具体的调用哪个方法。
class C
{
public static void main(String[] args)
{
A x11=new A();
x11.Meth1(); //A的对象当然只能调用A里面的meth1了
B x12=new B();
B.Meth1(1); //传递的是int,就调用int的那个
B.Meth1(1.1); // 传递的是float,就调用float的那个
}
}

热心网友 时间:2023-07-25 19:10

覆盖的意思就是如果你在子类中“覆盖”了父类的方法,那么你在生成对象的时候,如果你生成的是父类对象,那么方法还是调用父类没有被“覆盖”方法,如果是生成的子类对象,那么方法就调用被“覆盖”过的方法。

所谓隐藏,就是无论你生成父类对象还是子类对象,只要你子类对象重新定义了父类的静态方法,那么调用的都是子类中被重新定义的方法,而父类的方法无法被调用。

所以隐藏是只父类的方法被隐藏,无法被调用;而覆盖是指子类的方法覆盖父类的方法,但是父类还是可以调用自己的方法。

原因是,静态方法是描述一个类的行为的方法,就算没有对象也可以被调用,所以无论你创建什么对象(子类或者父类)都是一样的,但是如果是覆盖非静态方法的话,那就跟对象有关了,创建什么对象就调用谁的方法。

热心网友 时间:2023-07-25 19:10

class A{
static void fun1(){
System.out.println("A.fun1()");
}
static void fun3(){
System.out.println("A.fun3()");
}
}

class B extends A{
static void fun1(){
System.out.println("B.fun1()");
}
static void fun2(){
System.out.println("B.fun2()");
}
public void getAFun1(){
super.fun1();
}
}

class Test{
static public void main(String[] str){
B b=new B();
b.fun1();
b.fun2();
b.fun3();
b.getAFun1();
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
全方位揭秘!大数据从0到1的完美落地之Linux磁盘、压缩解压命令_百度... 长期喝红茶可以减肥吗 长期喝红茶能不能减肥呢 经常喝红茶会不会长胖啊 ...都行最好是写完的或者更新很多很多了主要是玄幻悬疑类的 ...身上后变强的女强文,最好是有女扮男装的,像《傲风》这一类型完结的... 民法典中商标使用在先是否侵权 武汉市著名商标认定和保护办法第二十条 侵犯行为包括哪种形式 擅自买卖商标标识会被认为滥用商标吗 道家有哪些人物 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 隐藏和 覆盖怎么感觉是一样的?(菜鸟!!在线) JAVA成员变量隐藏和方法的覆盖 C#和Java 方法重写和覆盖隐藏的区别 方法隐藏和方法覆盖的区别和用法 Java将多个sheet展示在一个sheet中?怎么做? java中 什么叫隐藏 java中 什么是隐藏?什么是重写?二者有何区别? java里的重写,重载,覆盖的区别? JAVA程序中封装与隐藏是什么意思 心有灵犀是什么意思? 心有灵犀的意思 心有灵犀什么意思? 心有灵犀是什么意思 什么叫心有灵犀? 心有灵犀的意思是什么? 心有灵犀什么意思?