Java解惑七:很多其它类之谜
谜题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解惑七:很多其它类之谜的更多相关文章
- Java第七天,类的继承
面向对象编程的三大特征: 封装.继承.多态 今天我们学习继承! 继承是多态的前提,如果没有继承就没有多态. 继承主要解决的问题就是共性抽取(将许多类共有的特性便作父类,这样可以较大程度的优化代码). ...
- Java解惑五:类之谜
本文是依据JAVA解惑这本书,做的笔记.电子书见:http://download.csdn.net/detail/u010378705/7527721 谜题46 函数重载的问题. JAVA重载解析过程 ...
- Java解惑八:很多其它库之谜
本文是依据JAVA解惑这本书,做的笔记. 电子书见:http://download.csdn.net/detail/u010378705/7527721 谜题76 将线程的启动方法start(),写成 ...
- Java基础语法<七> 对象与类
笔记整理 来源于<Java核心技术卷 I > <Java编程思想> 1. 类之间的关系 依赖 users– a 是一种最明显的.最常见的关系.如果一个类的方法操作另一个类的对象 ...
- Java基础语法<七> 对象与类 封装
笔记整理 来源于<Java核心技术卷 I > <Java编程思想> 1. 类之间的关系 1.1 依赖 users– a 是一种最明显的.最常见的关系.如果一个类的方法操作另一个 ...
- “全栈2019”Java第七十九章:类中可以嵌套接口吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第七十八章:内部类可以继承其他类吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java基础(七)常用类
一.Math类 1.Math类介绍 Math类属于java.lang包下面,里面包含用于执行基本数学运算的方法,如初等指数,对数,平方根和三角函数,该类被final修饰. 常用字段: 1.E 表示自然 ...
- [Java编程思想] 第七章 复用类
第七章 复用类 第一种方法非常直观:只需在新的类中产生现有类的对象(组合). 第二种方法更细致一些:它按照现有类的类型来创建新类(继承). 7.1 组合语法 只需将对象引用置于新类中即可. cla ...
随机推荐
- android.graphics.Color
该类定义的都是些static常量和函数,这些函数都是为了创建和转化成int型的color.颜色是由int型的数表示,由4个字节组成,分别是A R G B,这个int型的值是确定的,透明度的值只能存 ...
- cpu性能探究 :cache line 原理
參考: 一个解说Direct Mapped Cache很深入浅出的文章: http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/dir ...
- 用VC实现竖写汉字的方法
中国人自古就有自右至左.从上到下书写汉字的习惯.而当我们在自己所编写的应用程序中使用输出函数输出的总是自左至右的横排文字.有没有可能在我们的应用程序中实现竖写汉字的效果呢?笔者偶然发现了一种利用VC实 ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(二)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(二) 2.索引中用到的核心类 在Lucene.Net索引开发中,用到的类不多,这些类是索引过程的核心类.其中Analyzer是索引建立的 ...
- 百度地图new BMap.LocalCity() 问题
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- 14.2.5.7 Physical Row Structure 物理数据结构:
14.2.5.7 Physical Row Structure 物理数据结构: InnoDB物理记录结构依赖行格式 在表创建的时候, 默认, InnoDB 使用Antelope 文件存储格式和它的压缩 ...
- Tokyo Tyrant(TTServer)系列(四)-tcrmgr远程管理与调试
Tokyo Tyrant(TTServer)系列-tcrmgr(远程管理与调试) tcrmgr是TokyoTyrant的管理工具,对ttserver进行管理与执行命令: 通过输入tcrmgr回车,能够 ...
- Cygwin的安装及在Android jni中的简单使用举例
Cygwin是一个在windows平台上执行的类UNIX模拟环境,是cygnussolutions公司开发的自由软件.Cygwin是很多自由软件的集合,Cygwin的主要目的是通过又一次编译.将POS ...
- ASP.Net状态管理读书笔记--思维导图
课前提问几个问题 使用Session 配置 model aspnet_regsql.exe 常见问答 问:为什么Session在有些机器上偶尔会丢失?答:可能和机器的环境有关系,比如:防火墙或者杀毒软 ...
- javascript启示录英文单词生词
odd:奇怪的 represent:代表 primitive:原始的 trivial:平凡的 demonstrate:证明 keep this at the forefront of your min ...