`

java解惑(谜题66。。。)

阅读更多
谜题66:一件私事
class Base{
	public String className = "Base";
}

class Sub extends Base{
	private String className = "subclass";
}
public class PrivateMatter {
	public static void main(String[] args) {

		System.out.println(new Sub().className);
	}
}

注意该程序有编译错误。因为子类中的变量比父类中的变量更具限制性的访问权限。而子类的变量是private,访问不了。尽管父类的变量被隐藏了,但是可以通过将子类实例转化为父类来访问它,如下可以打印出Base:System.out.println(((Base)new Sub()).className);
一旦一个方法在子类中被覆盖,你就不能在子类的实例上调用它了(除了在子类内部,通过使用super关键字的方法),然而,你可以通过将子类实例转化为父类来访问被隐藏的域。
谜题67:对字符串上瘾
public class StrungOut {

	public static void main(String[] args) {

		String s = new String("hello");
		System.out.println(s);
	}
}
class String{
	private final java.lang.String s;
	public String(java.lang.String s){
		this.s = s;
	}
	public java.lang.String toString(){
		return s;
	}
}

运行会出现下图错误并报异常:java.lang.NoSuchMethodError: main



VM找不到main方法,是因为它并不在那里。一个main方法必须接受一个单一的字符串参数,而此程序中String是我们自己定义的String类,而非java.lang.String类。
谜题68:灰色的阴影
public class Shade {

	public static void main(String[] args) {
		System.out.println(X.Y.Z);
	}
}
class X{
	static class Y{
		static String Z = "Black";
	}
	static C Y = new C();
}
class C{
	String Z= "White";
}

输出的是White。有一条规则决定着程序的行为,即当一个变量和一个类型具有相同的名字,并且它们位于相同的作用域时,变量名具有优先权。相似的,变量名和类型名可以遮掩包名。
注意:编程习惯,变量名小写,类名大写
谜题71:进口税
import static java.util.Arrays.toString;
public class ImportDuty {

	public static void main(String[] args) {

		printArgs(1,2,3,4,5);
	}
	 static void printArgs(Object...args) {
		 System.out.println(toString(args));
	}
}

编译错误,Arrays.toString(Object[])可以完全匹配,为啥出错呢?本例中toString引用的是Object继承而来的toString方法。简单地说,本身就属于某个范围的成员在该范围内与静态导入相比具有优先权。
可改为:
import  java.util.Arrays;
public class ImportDuty {

	public static void main(String[] args) {

		printArgs(1,2,3,4,5);
	}
	 static void printArgs(Object...args) {
		 System.out.println(Arrays.toString(args)); //[1, 2, 3, 4, 5]
	}
}


谜题:
class Base {
	public static final String PRIZE = "$64,000";
}

public class Sub extends Base {
	public static final String PRIZE = "2 cents";

	public static void main(String[] args) {
		System.out.println(Sub.PRIZE); // 2 cents
	}
}

编译成功并打印出2 cents。
final修饰符对方法和域而言,意味着某些完全不同的事情。对于方法,final意味着该方法不能被覆写(对实例方法而言)或者隐藏(对静态方法而言)。对于域,final意味着该域不能被赋值超过一次。
  • 大小: 11.6 KB
分享到:
评论

相关推荐

    Java解惑(谜题)CHM中英文双版本

    谜题66:一件私事 谜题67:对字符串上瘾 谜题68:灰色的阴影 谜题69:黑色的渐隐 谜题70:一揽子交易 谜题71:进口税 谜题72:终极危难 谜题73:你的隐私正在公开 谜题74:同一性的危机 谜题75:头还是尾?...

    Java解惑PPT7

    这个谜题涉及到了Java中的继承和成员变量的覆盖(overridden)与隐藏(hidden)。在Java中,方法的覆盖要求子类中的方法至少有与父类相同的访问权限,但成员变量没有这样的限制。在例子中,Derived类中的private变量...

    毕业论文-智云物业 2.1.4-整站商业源码.zip

    毕业论文-智云物业 2.1.4-整站商业源码.zip

    实训商业源码-【超人】积分商城 6.0.5-论文模板.zip

    实训商业源码-【超人】积分商城 6.0.5-论文模板.zip

    基于局部费歇尔判别的LFDA-SVM二分类及多分类建模与可视化 - MATLAB实现

    内容概要:本文介绍了基于局部费歇尔判别(LFDA)和SVM的支持向量机二分类及多分类建模方法。首先,通过LFDA进行数据降维,保留局部信息,减少数据维度。接着,利用降维后的数据构建SVM分类模型,完成二分类和多分类任务。文中详细描述了LFDA的数据预处理、局部协方差矩阵和均值向量计算、类内散度和类间散度矩阵计算、广义特征值求解等步骤,以及SVM模型的训练、评估和可视化展示。最后,提供了MATLAB程序框架和关键步骤的伪代码,帮助读者理解和实现该方法。 适用人群:从事数据分析、机器学习领域的研究人员和技术人员,尤其是熟悉MATLAB编程环境的从业者。 使用场景及目标:适用于需要处理多特征输入、单输出或多输出分类任务的场景。通过LFDA降维和SVM建模,提升分类模型的性能和准确性。同时,生成分类效果图、降维展示图和混淆矩阵图,便于直观地展示和分析模型效果。 其他说明:本文提供的MATLAB代码框架和伪代码,需要根据具体应用场景进行详细实现和调整。重点在于数据预处理、特征选择、模型训练和评估等环节的具体操作。

    2025年大学新生开学季风格模板范文.pptx

    2025年大学新生开学季风格模板范文

    实训商业源码-思创兼职小程序V6.7.5 开源版-论文模板.zip

    实训商业源码-思创兼职小程序V6.7.5 开源版-论文模板.zip

    实训商业源码-旅游景区线路连锁店版V1.9.16 小程序前端+后端-论文模板.zip

    实训商业源码-旅游景区线路连锁店版V1.9.16 小程序前端+后端-论文模板.zip

    实训商业源码-【表哥】4s汽车城小程序8.1.0 前端+后端-论文模板.zip

    实训商业源码-【表哥】4s汽车城小程序8.1.0 前端+后端-论文模板.zip

    混合储能系统中飞轮与蓄电池协同平抑风电功率波动的技术研究与实现

    内容概要:本文探讨了利用混合储能系统(飞轮与蓄电池)来平抑风电功率波动的方法。文中介绍了两种主要的功率分配策略:抗脉冲平均滤波和滑动平均滤波。抗脉冲平均滤波用于应对突发性的功率变化,由飞轮快速响应;滑动平均滤波则用于处理较长时间尺度内的功率波动,由蓄电池进行调节。这两种方法相结合可以有效减少蓄电池的充放电次数并提高飞轮的响应效率。此外,文中提供了具体的Python代码示例,展示了如何通过编程实现这些策略。 适合人群:对新能源发电、电力系统稳定性以及储能技术感兴趣的科研人员和技术开发者。 使用场景及目标:适用于需要解决风电功率波动问题的风电场或相关研究项目。目标是通过合理的功率分配策略,确保电力系统的稳定运行,降低因风力发电不稳定性带来的负面影响。 其他说明:文中提到的技术手段不仅有助于提高能源利用率,还能延长储能设备的使用寿命。对于希望深入了解储能技术和风电功率管理的人来说,这是一个很好的参考资料。

    毕业论文-子恩2.0-整站商业源码.zip

    毕业论文-子恩2.0-整站商业源码.zip

    毕业论文-小小素材库 6.3.1-整站商业源码.zip

    毕业论文-小小素材库 6.3.1-整站商业源码.zip

    2025年度创意卡通小学开学季班会模板.pptx

    2025年度创意卡通小学开学季班会模板

    实训商业源码-老虎-微信淘宝客5.99.99-论文模板.zip

    实训商业源码-老虎-微信淘宝客5.99.99-论文模板.zip

    DEEPPOLAR(3)-DEEPOLAR代码

    DEEPPOLAR(3)-DEEPOLAR代码

    基于COMSOL仿真的超声清洗系统:压电片分布对声场强度的影响研究

    内容概要:本文详细探讨了利用多个28kHz压电片在2mm钢质水槽外侧分布激励超声波的技术,重点分析了压电片厚度、数量、排列方式以及钢壁厚和水槽尺寸等因素对声场强度的影响。研究表明,适中的压电片厚度能产生更强的声场,较厚的钢壁有助于更好地传递超声波,而合理的压电片分布则能确保声场的均匀传播。通过COMSOL仿真软件,作者模拟并找到了最优的压电片分布方案,以提升超声清洗的效果。 适合人群:从事超声清洗技术研发的专业人士、相关领域的研究人员和技术爱好者。 使用场景及目标:适用于希望深入了解超声清洗技术原理及其优化方法的研究人员和技术人员,旨在提高超声清洗系统的效率和性能。 其他说明:本文不仅提供了理论分析,还结合了实际实验数据和COMSOL仿真结果,为超声清洗技术的发展提供了有价值的参考。

    永磁同步电机FOC矢量控制模型及其Simulink仿真与代码实践

    内容概要:本文介绍了自主研发的永磁同步电机FOC(Field Oriented Control)矢量控制模型及其代码实现。该模型集成了多种先进功能,如FOC算法、SVPWM、DPWM、死区补偿、过调制和母线电流估算等。通过Simulink界面进行源代码仿真,验证了模型的可靠性和有效性。主要内容涵盖FOC矢量控制模型的简介、代码的功能特点、Simulink仿真的方法及其应用效果。 适合人群:从事电机控制系统研究和开发的技术人员,尤其是对永磁同步电机和FOC控制感兴趣的工程师。 使用场景及目标:适用于需要深入了解和掌握永磁同步电机FOC控制技术的研究人员和技术开发者。目标是提升电机的运行效率、稳定性和输出转矩,同时优化电机的性能和可靠性。 其他说明:文中详细描述了如何利用Simulink进行仿真测试,确保代码在各种工况下都能稳定运行。这对于希望在实际项目中应用FOC控制技术的人来说非常有帮助。

    检维修电工培训资料及规程

    检维修电工培训资料及规程

    python打卡DAY17

    python打卡DAY17

    毕业论文-云海计费系统-整站商业源码.zip

    毕业论文-云海计费系统-整站商业源码.zip

Global site tag (gtag.js) - Google Analytics