JAVA中方法和变量在继承中的覆盖和隐藏

现代特种作战体系解析:从情报融合到战术协同的实战逻辑 现代特种作战体系是复杂系统工程的典型代表,其核心在于通过多源情报融合构建精准目标画像,并依托模块化单兵装备与协同感知网络实现高效任务执行。从技术原理看,C4I系统、数据链与传感器网络构成了战场信息优势的基础,通过实时数据共享与决策支持,极大提升了小团队在复杂环境下的态势感知与协同能力。这种技术架构的价值在于将分散的作战单元整合为有机整体,实现从渗透、CQB到撤离的全流程可控。其应用场景不仅限于军事领域,其强调的情报驱动、技术赋能与团队协作模式,对需要应对高风险、高不确定性任务的商业项目管理与危机处置同样具有 阅读详情


我们知道,在JAVA中,子类可以继承父类,如果子类声明的方法与父类有重名的情况怎么办,大伙儿都知道要是重写,但是实际上这又分为两种情况,就是方法和变量在继承时的覆盖和隐藏问题,这些概念性的东西看似无聊,但是在面试或者是SCJP认证题中围绕这些是会经常碰到的,所以这里来讨论下

 

首先我们来看几个概念

隐藏 :child隐藏了parent的变量和方法,那么,child不能访问parent被隐藏的变量或者方法,但是,讲B转换成A中,可以访问A被隐藏的变量或者方法

覆盖 :child覆盖了parent的变量或者方法,那么,child不能访问parent被覆盖的变量或者方法,将child转换成parent后同样不能访问parent被覆盖的变量或者方法

 

首先看一下JAVA中方法和变量在继承时的覆盖和隐藏规则

1.父类的实例变量和静态变量能被子类的同名变量隐藏

2.父类的静态方法被子类的同名静态方法隐藏

3.父类的实例方法被子类的同名实例变量覆盖

 

还有几点需要注意的是

1.不能用子类的静态方法隐藏 父类中同样标示(也就是返回值 名字 参数都一样)的实例方法

2.不能用子类的实例方法覆盖 父类中同样标示的静态方法

3.这点儿请注意,就是变量只会被隐藏 不会被覆盖 ,无论他是实例变量还是静态变量,而且,子类的静态变量可以隐藏 父类的实例变量,子类的实例变量可以隐藏 父类的静态变量

 

O(∩_∩)O哈哈~ 是不是有点儿绕口,没关系 我们看一个实例

创建两个父子类关系的类

Java代码 复制代码  收藏代码
  1. //父类  
  2. class Parent  
  3. {  
  4.     public static String kind="javastudy.extendsstudy.parent";  
  5.     public static int age=50;  
  6.     public String name="Parent";  
  7.   
  8.     //静态方法,返回包名  
  9.     public static String getKind()  
  10.     {  
  11.         System.out.println("parent的getKind()方法被调用了");  
  12.         return kind;  
  13.     }  
  14.   
  15.     //静态方法,返回年龄  
  16.     public static int getAge()  
  17.     {  
  18.         System.out.println("Parent的getAge()方法被调用了");  
  19.         return age;  
  20.     }  
  21.   
  22.     //实例方法,返回姓名  
  23.     public String getName()  
  24.     {  
  25.         System.out.println("Parent的getName()方法被调用了");  
  26.         return this.name;  
  27.     }  
  28.   
  29. }  
  30.   
  31.   
  32. //子类  
  33. class Child extends Parent  
  34. {  
  35.     public static String kind="javastudy.extendsstudy.child";  
  36.     public int age=25;  
  37.     public String name="child";  
  38.   
  39.     //隐藏父类静态方法  
  40.     public static String getKind()  
  41.     {  
  42.         System.out.println("child的getkind()方法被调用了");  
  43.         return kind;  
  44.     }  
  45.       
  46.     //获取父类包名  
  47.     public static String getParentKind()  
  48.     {  
  49.         return Parent.kind;  
  50.     }  
  51.       
  52.     //覆盖父类实例方法  
  53.     public String getName()  
  54.     {  
  55.         System.out.println("child的getName()被调用了");  
  56.         return this.name;  
  57.     }  
  58.       
  59.     //获取父类名称  
  60.     public String getParentName()  
  61.     {  
  62.         return super.name;  
  63.     }  
  64.     /* 
  65.      *错误,实例方法不能覆盖父类的静态方法 
  66.     public int getAge() 
  67.     { 
  68.         return this.age; 
  69.     } 
  70.     */  
  71. }  
//父类
class Parent
{
	public static String kind="javastudy.extendsstudy.parent";
	public static int age=50;
	public String name="Parent";

	//静态方法,返回包名
	public static String getKind()
	{
		System.out.println("parent的getKind()方法被调用了");
		return kind;
	}

	//静态方法,返回年龄
	public static int getAge()
	{
		System.out.println("Parent的getAge()方法被调用了");
		return age;
	}

	//实例方法,返回姓名
	public String getName()
	{
		System.out.println("Parent的getName()方法被调用了");
		return this.name;
	}

}


//子类
class Child extends Parent
{
	public static String kind="javastudy.extendsstudy.child";
	public int age=25;
	public String name="child";

	//隐藏父类静态方法
	public static String getKind()
	{
		System.out.println("child的getkind()方法被调用了");
		return kind;
	}
	
	//获取父类包名
	public static String getParentKind()
	{
		return Parent.kind;
	}
	
	//覆盖父类实例方法
	public String getName()
	{
		System.out.println("child的getName()被调用了");
		return this.name;
	}
	
	//获取父类名称
	public String getParentName()
	{
		return super.name;
	}
	/*
	 *错误,实例方法不能覆盖父类的静态方法
	public int getAge()
	{
		return this.age;
	}
	*/
}

 然后测试下

Java代码 复制代码  收藏代码
  1. class Test   
  2. {  
  3.     public static void main(String[] args)   
  4.     {  
  5.         Child child=new Child();  
  6.         System.out.printf("子类名称:%s,年龄:%d,包名:%s%n",child.name,child.age,child.kind);  
  7.         //输出:子类名称:child,年龄:25,包:javastudy.extendsstudy.child  
  8.   
  9.         //把child转换成parent对象  
  10.         Parent parent=child;  
  11.   
  12.         System.out.printf("转换后的名称:%s,年龄:%d,包名:%s%n",parent.name,parent.age,parent.kind);  
  13.         //输出:转换后的名称:Parent,年龄:50,包:javastudy.extendsstudy.parent  
  14.   
  15.         System.out.printf("子类访问父类被隐藏的实例变量name:%s%n",child.getParentName());  
  16.         //输出:子类访问父类被隐藏的实例变量name:Parent  
  17.           
  18.         System.out.printf("子类访问父类被隐藏的静态变量kind:%s",child.getParentKind());  
  19.         //输出:子类访问父类被隐藏的静态变量kind:javastudy.extendsstudy.parent  
  20.   
  21.         child.getName();  
  22.         //输出:child的getName()被调用了  
  23.   
  24.         //**************注意看这个方法,返回的还是子类的getName  
  25.         parent.getName();  
  26.         //输出:child的getName()被调用了  
  27.   
  28.         child.getKind();  
  29.         //输出:child的getkind()方法被调用了  
  30.   
  31.         parent.getKind();  
  32.         //输出:parent的getKind()方法被调用了  
  33.     }  
  34. }  
class Test 
{
	public static void main(String[] args) 
	{
		Child child=new Child();
		System.out.printf("子类名称:%s,年龄:%d,包名:%s%n",child.name,child.age,child.kind);
		//输出:子类名称:child,年龄:25,包:javastudy.extendsstudy.child

		//把child转换成parent对象
		Parent parent=child;

		System.out.printf("转换后的名称:%s,年龄:%d,包名:%s%n",parent.name,parent.age,parent.kind);
		//输出:转换后的名称:Parent,年龄:50,包:javastudy.extendsstudy.parent

		System.out.printf("子类访问父类被隐藏的实例变量name:%s%n",child.getParentName());
		//输出:子类访问父类被隐藏的实例变量name:Parent
		
		System.out.printf("子类访问父类被隐藏的静态变量kind:%s",child.getParentKind());
		//输出:子类访问父类被隐藏的静态变量kind:javastudy.extendsstudy.parent

		child.getName();
		//输出:child的getName()被调用了

		//**************注意看这个方法,返回的还是子类的getName
		parent.getName();
		//输出:child的getName()被调用了

		child.getKind();
		//输出:child的getkind()方法被调用了

		parent.getKind();
		//输出:parent的getKind()方法被调用了
	}
}

 好了,看了结果后总结下吧

1.同名的实例方法被覆盖 ,同名的静态方法被隐藏 ,child类的getName实例方法覆盖 了parent的getName实例方法,chind的getKind方法隐藏 了parent类的getKind方法

2.隐藏 和覆盖 的区别在于,子类对象转换成父类对象后,能够访问父类被隐藏 的变量和方法,而不能访问父类被覆盖 的方法

3.如果需要访问父类被隐藏 的实例变量,加上super就好了,比如访问父类的name,写上super.name就好了

 

本文不是教会大家重写父类变量的,而是重点说明方法和变量的隐藏和覆盖,这些个小知识点虽然在做项目的时候不怎么会用到,但是一定要记住,不然的话很多错误会感到莫名其妙,还有就是SCJP的题库里这类题大大存在,所以本人觉得这些细小的知识还是记住为好

java子类调用父类的方法中包含子类重写的实例方法 在本篇文章里小编给大家整理了关于java子类调用父类的方法中包含子类重写的实例方法以及相关知识点,需要的朋友们可以学习下。 立即下载

相关推荐

maxwell与steady state thermal 通过workbench耦合仿真

文章目录maxwellsteady state thermal maxwell 1加入maxwell并打开 2导入模型 3选择求解器类型:涡流求解器eddy current 4修改模型名字不能带_等特殊符号 5为模型赋材料 6设立3D边界,各边电流进出方向为0其余方向300 7设置激励条件,可设置电流大小,相位,方向 8设置集肤深度,选取中间铜导体的体然后设置,如何设置看帮助文档 9求解设置 迭代步数 收敛精度 交流电频率 10验证条件满足计算 11求解 发现无法求解,删除ai

roymustang的博客 9201

java继承与覆盖

语句创建obj1时,系统会首先调用父类的无参构造方法,然后在调用子类的无参构造方法,所以父类中的name被赋值为person name,子类中的name被赋值为student name,公共成员age先被赋值为23,然后被赋值为20。基于父类创建子类时,子类可以继承父类的成员变量和成员方法。子类可以继承父类中所以可以被子类访问的成员方法,但是如果子类重新定义了从父类继承的方法,那么父类的这个方法在子类中将不复存在,此时称子类方法覆盖了父类的方法,简称方法覆盖。1.子类可以继承父类的成员变量,

qq_74722140的博客 581

从智能手机到汽车电子:聊聊IPC-9702/9704A标准如何帮我们搞定不同场景下的PCB可靠性设计

本文探讨了IPC-9702/9704A标准在智能手机和汽车电子等不同场景下的PCB可靠性设计应用。通过分析消费电子、汽车电子和工业设备中的应力特征,详细解读了IPC标准在应变识别和测试方法论中的核心价值,并提供了具体的轻量化设计策略和全生命周期验证方案,帮助工程师提升PCB的长期可靠性。

weixin_30693683的博客 279

java 继承 变量覆盖_JAVA中方法和变量在继承中的覆盖和隐藏

我们知道,在JAVA中,子类可以继承父类,如果子类声明的方法与父类有重名的情况怎么办,大伙儿都知道要是重写,但是实际上这又分为两种 情况,就是方法和变量在继承时的覆盖和隐藏问题,这些概念性的东西看似无聊,但是在面试或者是SCJP认证题中围绕这些是会经常碰到的,所以这里来讨论下首先我们来看几个概念隐藏 :child隐藏了parent的变量和方法,那么,child不能访问parent被隐藏的变量或者方...

weixin_28940939的博客 83

使用STC15F104W产生PWM脉冲

最近的小项目中使用到了STC15F104W产生PWM脉冲

yeats1989的专栏 1万+

机器人多学科仿真软件:Webots_(19).Webots的插件与扩展开发

通过上述步骤,您可以开发和使用Webots的插件、扩展和接口,以增强其功能和灵活性。

kkchenjj的博客 925

java 继承隐藏_JAVA中方法和变量在继承中的覆盖和隐藏(一)

我们知道,在JAVA中,子类可以继承父类,如果子类声明的方法与父类有重名的情况怎么办,大伙儿都知道要是重写,但是实际上这又分为两种情况,就是方法和变量在继承时的覆盖和隐藏问题,这些概念性的东西看似无聊,但是在面试或者是SCJP认证题中围绕这些是会经常碰到的,所以这里来讨论下首先我们来看几个概念类变量:又叫静态变量,这种变量属于类,通过类名就可以访问类变量。实例变量:属于类的实例,即对象,通过对象可...

weixin_31992389的博客 426

【DeepSeek开发入门】DeepSeek API 开发初体验

在人工智能蓬勃发展的时代,DeepSeek作为一款功能强大的AI大模型,为开发者提供了丰富的接口和便捷的开发体验。本文将基于DeepSeek的几个关键接口,带你快速入门,开启DeepSeek开发的探索之旅。通过本文,你已经初步了解了DeepSeek开发中几个重要接口的使用方法,包括列出模型、对话补全和查询余额接口,以及开发过程中的常见问题及解决办法。这是你踏入DeepSeek开发领域的第一步。在后续的学习中,你可以深入研究模型的参数调优,探索不同模型在各种场景下的应用,如利用模型实现更复杂的推理对话功能。

寻道AI,探索AI无限可能! 2757

面试题2——JAVA中方法和变量在继承中的覆盖和隐藏

我们知道,在JAVA中,子类可以继承父类,如果子类声明的方法与父类有重名的情况怎么办,大伙儿都知道要是重写,但是实际上这又分为两种情况,就是方法和变量在继承时的覆盖和隐藏问题,这些概念性的东西看似无聊,但是在面试或者是SCJP认证题中围绕这些是会经常碰到的,所以这里来讨论下   首先我们来看几个概念 隐藏 :child隐藏了parent的变量和方法,那么,child不能访问par

ligengk的专栏 702

当SLAM遇上FPGA:打造一个会“硬件加速”的激光雷达SLAM系统

点云数据的运动畸变校正特征点提取与匹配、以及ICP迭代最近点配准。在传统方案中,我们通常用ARM核完成所有计算。但点云配准中的最近邻搜索(KD-Tree)需要大量分支判断,CPU处理起来效率很低;而ICP中的矩阵分解(SVD)虽然计算量大,但非常适合并行化。ZYNQ的特殊之处在于它把ARM(PS端)和FPGA(PL端)集成在同一颗芯片上。ARM擅长跑操作系统、处理复杂逻辑和调度,FPGA擅长做高吞吐量的并行计算。两者之间通过AXI总线高速互联,数据交换延迟只有几十个时钟周期。

QQ_778132974的博客 375

麒麟操作系统安装教程(保姆级)

本文介绍了如何在VM中安装麒麟操作系统,文章详细的介绍了麒麟操作系统按钻过步骤。

啊渊的专栏 1万+

java 如何继承ip,JAVA中方法和变量在继承中的覆盖和隐藏

http://renyanwei.javaeye.com/blog/258304我们知道,在JAVA中,子类可以继承父类,如果子类声明的方法与父类有重名的情况怎么办,大伙儿都知道要是重写,但是实际上这又分为两种情况,就是方法和变量在继承时的覆盖和隐藏问题,这些概念性的东西看似无聊,但是在面试或者是SCJP认证题中围绕这些是会经常碰到的,所以这里来讨论下首先我们来看几个概念隐藏 :child隐藏了p...

weixin_29417899的博客 139

【CAN总线测试】——使用VH6501 进行Busoff快慢恢复测试

即在IDBase中填标准帧11位二进制ID,如果不满11位,高位补零,凑齐11位,并将下方CurrTriggerField设置干扰前一位AckSlot位,Triggeroffset设置为0。首先确认环境支持VN6501,6501硬件连接成功后,工程的小闪电是正常黄色状态,若是灰色证明缺少License,或者软件安装环境不正确。填写干扰报文ID、干扰位置 注意这里的干扰位置是实际干扰的前一位,TriggerOffset表示偏移量,可以干扰某个字节的具体位.找到并打开Panel后,开启工程,并且配置面板。

LOVE135149的博客 5630
上一篇: 内部类
下一篇: start_with connect_by_prior
lujun12
博客等级 码龄15年 0粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值