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
例如局部变量和全局变量
时间: 2024-10-29 19:07:55