`

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解惑 java 表达式谜题 java 字符谜题 java 循环谜题 java 异常谜题

    java 表达式谜题 java 字符谜题 java 循环谜题 java 异常谜题 java 高级谜题 ......

    java解惑java解惑java解惑

    java解惑java解惑java解惑java解惑java解惑java解惑

    Java解惑/Java谜题(CHM)

    我整理出来的Java解惑/谜题的CHM版本,包括目录、全文搜索和收藏夹。比目前Word/PDF版本的多个目录,比TXT版本的多一些格式。-- 如果不能打开CHM,请按下面方法解决:-- 右键点击chm文档,查看属性,可以看到...

    Java解惑Java解惑

    Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑

    java解惑(java谜题)中文版的

    java解惑(java谜题)中文版的. 值得一看的JAVA资料. Java puzzlers

    JAVA解惑(JAVA谜题) 中文版(PDF)

    Java解惑,是一本以大量java实例,讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java...

    java解惑 书籍类 谜题

    java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑

    Java解惑.pdf

    Java解惑.pdf Java解惑.pdf Java解惑.pdf Java解惑.pdf

    Java解惑 中文版

    Java解惑中文版 Java解惑 java健壮程序

    JAVA解惑.pdf

    JAVA解惑.pdf JAVA解惑.pdf JAVA解惑.pdf

    Java解惑(中文版)_java_java解惑_solve65p_

    与java相关的的学习,适合初学者,可以看看

    Java解惑 布洛克 著;陈昊鹏 译

    《Java解惑》 布洛克 著;陈昊鹏 译 扫描清晰带目录,仅供参阅,请支持正版

    Java PUZZLE Java 解惑

    Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑

    JAVA 解惑 java经典

    JAVA解惑,你面包括一些java经典的问题。

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

    Java谜题 Java谜题1——表达式谜题 谜题1:奇数性 谜题2:找零时刻 谜题3:长整除 谜题4:初级问题 谜题5:十六进制的趣事 谜题6:多重转型 谜题7:互换内容 谜题8:Dos Equis 谜题9:半斤 谜题10:八两 ...

    java谜题解惑 中文chm

    在每个谜题之后都有详细的解惑方案,这些方案在给出那些实际行为与表面上迥异的程序行为的简单解释的同时,更向读者展示了如何一劳永逸地避免底层的陷阱与缺陷。 本书以轻松诙谐的语言,寓教于乐的方式,由浅入深、...

    最新版的Java-解惑

    《Java解惑》《Java解惑》《Java解惑》《Java解惑》《Java解惑》《Java解惑》

    《Java Pazzlers》Java解惑.pdf 书签齐全

    该书特写了95个有关Java或其类库的陷阱和缺陷的谜题,其中大多数谜题都采用了短程序的方式,这些程序的行为与其看似的大相径庭。在每个谜题之后都给出了详细的解惑方案,这些解惑方案超越了对程序行为的简单解释,向...

    java解惑 PDF版

    95个谜题,即95个java开发者常见错误,经常混淆的地方,希望对大家有所帮助,这个pdf文档超清晰

Global site tag (gtag.js) - Google Analytics