Java谜题——类谜题(二)
1、域的隐藏
代码如下:
class Base {
public String className = "Base";
}
class Derived extends Base {
private String className = "Derived";
}
public class PrivateMatter {
public static void main(String[ ] args) {
System.out.println(new Derived().className);
}
}
先猜猜输出什么吧?还是编译都不通过?
父类Base和子类Derived中都有变量className,尽管Base有一个公共域className,但是这个域没有被继承到Derived类中,因为它被Derived中的className隐藏了。又因为Derived中的className为私有的,所以不具有访问权限,导致出现编译错误。
那我们怎么样去访问Base的公共变量className呢?你肯定会想到强制类型转换,事实就是这么做的!
代码如下:
class Base {
public String className = "Base";
}
class Derived extends Base {
public String className = "Derived";
}
public class PrivateMatter {
public static void main(String[ ] args) {
System.out.println(((Base)new Derived()).className);
}
}
到此,我们可以得出一条结论,隐藏后的域可以通过子类强制类型转换来访问。但是,我们是否联想到方法的覆写?方法被覆写之后,不能通过这种方法访问到(除非在子类方法中使用super关键字调用父类方法)。因为强制类型转换之后,虽然得到父亲的引用,但是仍然是子类的实例,所以调用的方法还是子类的方法。(这也就是隐藏和覆写的区别)
编写程序时,除了覆写,要特别注意名字的区分,尽量不要一样。
2、Java规定:一个main方法必须接受一个单一的字符串数组参数
3、java 默认修饰符
特别注意缺省的时候与在不在同一个包中的关系。
参考博客:http://blog.csdn.net/cocojiji5/article/details/6638240
还要注意:包内私有的方法是不能被包外的方法声明所覆写。
4、final修饰符作用
对方法而言:final意味着该方法不能被覆写(对实例方法而言)或者隐藏(对静态方法而言)。对于域,final意味着该域不能被赋值超过一次。
5、遮掩obscure
6、遮蔽shadow
例如局部变量和全局变量
Java谜题——类谜题(二)的更多相关文章
- Java高级类特性(二)
一.static关键字 static关键字用来声明成员属于类,而不是属于类的对象.1). static (类)变量类变量可以被类的所有对象共享,以便与不共享的成员变量区分开来. static变量也称作 ...
- Java常用类(二)String类详解
前言 在我们开发中经常会用到很多的常用的工具类,这里做一个总结.他们有很多的方法都是我们经常要用到的.所以我们一定要把它好好的掌握起来! 一.String简介 1.1.String(字符串常量)概述 ...
- java中的常用类(二)
java中的常用类(二) Math类 Math类的声明:public final class Math extends Object Math类是与数学计算有关的类,里面的方法都是静态方法,直接使用类 ...
- Java 反射理解(二)-- 动态加载类
Java 反射理解(二)-- 动态加载类 概念 在获得类类型中,有一种方法是 Class.forName("类的全称"),有以下要点: 不仅表示了类的类类型,还代表了动态加载类 编 ...
- Java常用类(二) Scanner类和大数类
二.Scanner类 有C系语言基础的可能都比较熟悉scanf("%d",&a);和cin>>a;这种代码,也打开了程序交互的第一道门.因此,这些程序员开始学J ...
- java web学习总结(二十二) -------------------简单模拟SpringMVC
在Spring MVC中,将一个普通的java类标注上Controller注解之后,再将类中的方法使用RequestMapping注解标注,那么这个普通的java类就够处理Web请求,示例代码如下: ...
- Java:类与继承
Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知 ...
- JAVA NIO系列(二) Channel解读
Channel就是一个通道,用于传输数据,两端分别是缓冲区和实体(文件或者套接字),通道的特点(也是NIO的特点):通道中的数据总是要先读到一个缓冲区,或者总是要从一个缓冲区中读入. Channel的 ...
- Java设计模式(十二) 策略模式
原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern) ...
随机推荐
- vs调试有时能进去后台,有时不能进去
前两天做项目时,遇到调试时有时候能进后台,有时候直接就弹出运行结果,反复查找原因,最后发现,原来是页面输出缓存的原因,我在web页面用到了< OutputCache Duration=" ...
- 笨方法学python--提问
1 实现 用户在终端进行输入 的方法 print "how old are you?", age = raw_input() 该地方,第1名后面加逗号,然后必须换行 2 若要限制用 ...
- c#抓取网页内容乱码的解决方案
写过爬虫的同学都知道,这是个很常见的问题了,一般处理思路是: 使用HttpWebRequest发送请求,HttpWebResponse来接收,判断HttpWebResponse中”Content-Ty ...
- Delphi XE2 生成的.exe 在未安装有Delphi的电脑上运行提示 “丢失 rtl160.bpl”
解决方案: XE2中加入了多平台的概念,默认的Release模式,也是带包编译,带运行时库的,所以,需要手工设置一下工程选项: 打开工程以后,Project-->Options-->左侧树 ...
- Notification使用笔记
之前在项目中使用了Notification,现分享出来: checkNotification() function checkNotification(){ //判断是否支持Notification ...
- Hibernate 系列教程9-自关联
自关联:本质还是原来双向一对多,原来要配置两个类,现在全部都配置在一个类里面 Employee public class Employee { private Long id; private Str ...
- 2014 Shanghai Invitation Contest
题目链接 http://acm.hdu.edu.cn/search.php?field=problem&key=2014%C9%CF%BA%A3%C8%AB%B9%FA%D1%FB%C7%EB ...
- POJ 2182/暴力/BIT/线段树
POJ 2182 暴力 /* 题意: 一个带有权值[1,n]的序列,给出每个数的前面比该数小的数的个数,当然比一个数前面比第一个数小的个数是0,省略不写,求真正的序列.(拗口) 首先想到的是从前到后暴 ...
- [转]java static final 初始化
http://tanbing1986411.blog.163.com/blog/static/7259798220103610224434/ java static final 初始化 1.stati ...
- hdu 3342 Legal or Not(拓扑排序)
Legal or Not Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total ...