问答文章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
国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 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程序中封装与隐藏是什么意思 心有灵犀是什么意思? 心有灵犀的意思 心有灵犀什么意思? 心有灵犀是什么意思 什么叫心有灵犀? 心有灵犀的意思是什么? 心有灵犀什么意思?