谜题66

继承的问题。

对于实例方法:命名同样时,子类会覆写父类的方法,且訪问权限至少和父类一样大。

对于域:命名同样时,子类会隐藏父类的域,且訪问权限随意。

谜题67

不要重用库中的类名。

谜题68

命名的问题。

类名应该以大写字母开头,形式为:MixedCase。

变量以小写字母开头,形式为:mixedCase。

常量以大写字母开头,形式为:MIXED_CASE。

单个大写字母,仅仅能用于类型參数,形式为:Map<K, V>。

包名应该都是小写,形式为:lower.case。

当一个变量和一个类型具有同样的名字,而且作用于同样的作用域时,变量名具有优先权。

即:变量名遮掩(obscure)类型名。相同变量名和类型名能够遮掩包名。
class X {
static class Y {
static String Z = "Black";
}
static C Y = new C();
}
class C {
String Z = "White";
}
public class ShadesOfGray {
public static void main(String[] args) {
System.out.println(X.Y.Z); //输出结果是:White
} }

谜题69

怎样引用上题中的被遮掩的类型名。
技巧在某一种特殊的语法上下文环境中使用该名字,语法上下文环境同意出现一个类型名可是不同意出现变量。
技巧一
<span style="font-size:18px;">		System.out.println(((X.Y)null).Z);</span>

技巧二

<span style="font-size:18px;">static class Xy extends X.Y{};
System.out.println(Xy.Z);</span>

技巧三: 5.0版本号之后

<span style="font-size:18px;">public static <T extends X.Y> void main(String[] args) {
System.out.println(T.Z);
}</span>

谜题70

具有包内訪问权限修饰的方法的类,在其它包内被继承时,该方法不可能被覆写。

即使是方法名同样,也是两个不同的方法。

谜题71

名字重用导致遮蔽(shade):一个声明仅仅能遮蔽类型同样的还有一个声明。
静态导入Arrays.toString,当在类中使用toString()时,会调用Object类中的toString方法。

谜题72

名字重用的问题。

final修饰符

对于方法:实例方法不能覆写,静态方法不能隐藏。

对于域:不能被赋值超过一次。因此能够被隐藏。

谜题73

遮蔽:被遮蔽类型能够来自外围类,而不是来自库。

隐藏:本来调用的父类的变量,结果声明了一个同名的私有的变量。

谜题74

重载方法要确定全部的重载版本号一致。

谜题75

版本号升级后带来的不一致,了解就可以。

名字重用术语表

覆写(override)

一个实例方法能够覆写(override)在其超类中可訪问大的具有同样签名的全部实例方法,从而能动态分派,,VM将基于实例执行期类型来选择要调用的覆写方法。
class Base {
public void f(){}
}
class Derived extends Base {
public void f() {} //override Base.f()
}

重载(overload)

同一个类中,方法名同样,签名不同。重载的方法是编译期选定的
class A {
public void f (int i){}
public void f (String s) {}
}

隐藏(hide)

子类中的一个域、静态方法或成员类型能够隐藏超类中可訪问到具有同名的全部与、静态方法或成员类型。
隐藏一个成员将阻止其被继承。
class Base {
public static void f() {}
} class Derived extends Base {
public static void f() {}
}

遮蔽(shadow)

变量、方法或类型能够遮蔽文本范围内具有同样名字的全部变量、方法、或类型。

class WhoKnows {
static Stirng sentence = "I do not know";
public static void main(String [] args) {
String sentence = "i know"; //shadow static field
system.out.println(sentence);
}
}

遮掩(obscure)

变量能够遮掩同一范围内同样名字的类型,
变量或者类型能够遮掩一个包。
public class Obscure {
static String System; //Obscures type java.lang.System
public static void main(String[] args) {
System.out.println("hello"); //won't compile
}
}

Java解惑七:很多其它类之谜的更多相关文章

  1. Java第七天,类的继承

    面向对象编程的三大特征: 封装.继承.多态 今天我们学习继承! 继承是多态的前提,如果没有继承就没有多态. 继承主要解决的问题就是共性抽取(将许多类共有的特性便作父类,这样可以较大程度的优化代码). ...

  2. Java解惑五:类之谜

    本文是依据JAVA解惑这本书,做的笔记.电子书见:http://download.csdn.net/detail/u010378705/7527721 谜题46 函数重载的问题. JAVA重载解析过程 ...

  3. Java解惑八:很多其它库之谜

    本文是依据JAVA解惑这本书,做的笔记. 电子书见:http://download.csdn.net/detail/u010378705/7527721 谜题76 将线程的启动方法start(),写成 ...

  4. Java基础语法<七> 对象与类

    笔记整理 来源于<Java核心技术卷 I > <Java编程思想> 1. 类之间的关系 依赖 users– a 是一种最明显的.最常见的关系.如果一个类的方法操作另一个类的对象 ...

  5. Java基础语法<七> 对象与类 封装

    笔记整理 来源于<Java核心技术卷 I > <Java编程思想> 1. 类之间的关系 1.1 依赖 users– a 是一种最明显的.最常见的关系.如果一个类的方法操作另一个 ...

  6. “全栈2019”Java第七十九章:类中可以嵌套接口吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. “全栈2019”Java第七十八章:内部类可以继承其他类吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. Java基础(七)常用类

    一.Math类 1.Math类介绍 Math类属于java.lang包下面,里面包含用于执行基本数学运算的方法,如初等指数,对数,平方根和三角函数,该类被final修饰. 常用字段: 1.E 表示自然 ...

  9. [Java编程思想] 第七章 复用类

    第七章 复用类 第一种方法非常直观:只需在新的类中产生现有类的对象(组合). 第二种方法更细致一些:它按照现有类的类型来创建新类(继承). 7.1 组合语法   只需将对象引用置于新类中即可. cla ...

随机推荐

  1. 实现StatusBar的Flat风格

    效果见右图,OfficeXP里就是这样的风格,其实实现很简单,不必专门在网上找别人控件. 把StatusBar的SimplePanel设为False,点击Panels添加StatusPanel,把所有 ...

  2. DELPHI XE7 新的并行库

    DELPHI XE7 的新功能列表里面增加了并行库System.Threading, System.SyncObjs. 为什么要增加新的并行库? 还是为了跨平台.以前要并行编程只能从TThread类继 ...

  3. Uva - 11383 - Golden Tiger Claw

    题意:一个N*N的矩阵,第i行第j列的元素大小为w[i][j],每行求一个数row[i],每列求一个数col[j],使得row[i] + col[j] >= w[i][j],且所有的row[]与 ...

  4. 如何在eclipse dump Java内存占用情况和打印GC LOG

     当使用java开发应用程序发生内存泄露的时候,经常会需要dump内存,然后使用内存分析工具,比如Eclipse Memory Analyzer(一般称作MAT)工具. 本文将介绍如何在eclipse ...

  5. 编写生成彩色验证码的Servlet

    利用Ajax实现无刷新的彩色验证码时,也需要编写一个名称为PictureCheckCode.java的Servlet,该类继承HttpServlet,主要通过service()方法生成验证码. 下面将 ...

  6. 深入认识Tigase XMPP Server(上)

    深入认识Tigase XMPP Server(上) 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 本文的目的是深入认识Tigase XMPP Serve ...

  7. XSS分析及预防(转)

    阅读目录 XSS的种类和特点 XSS预防 总结 XSS(Cross Site Scripting),又称跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行.在WEB前端应用日益发展的今天,XSS漏 ...

  8. Uva - 11419 - SAM I AM

    题意:一个矩形——R*C的网格,在某些位置上有石头,在网格外开一炮可以打掉该行或者该列的石头,求打掉这些石头最少需要多少门大炮,位置分别设在哪行哪列(0<R<1001, 0 < C ...

  9. hdu3068之manacher算法+详解

    最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  10. stripslashes和addslashes的区别

    我们在向mysql写入数据时,比如: mysql_query(”update table set `title`=’kuhanzhu’s blog’”); 那就会出错.同asp时一样,数据库都会对单引 ...