Java实例方法被覆盖,静态方法被隐藏
来源:互联网 发布:网络募捐突破地域限制 编辑:程序博客网 时间:2024/05/15 20:55
封装、继承、多态是面向对象编程中三个比较重要的概念,理解这3个概念对领会JAVA语言至关重要,而搞懂方法的覆盖又是理解继承的关键部分,这里解释“实例方法被覆盖,静态方法被隐藏”的概念。
首先看一段代码:
class Super {static String greeting(){return "Good night";} String name(){ return "Richard"; }}class Sub extends Super {static String greeting(){return "Hello";} String name(){ return "Dick"; }}public class MyTest { public static void main(String args[]) { Super s1 = new Super(); Sub s2 = new Sub(); Super s3 = new Sub(); System.out.println(s1.greeting()+ ","+s1.name()); System.out.println(s2.greeting()+ ","+s2.name()); System.out.println(s3.greeting()+ ","+s3.name()); } }
运行Test 类的结果为:
Good night,Richard
Hello,Dick
Good night,Dick
这里greeting()是静态方法,name()是实例方法。
因为Sub 类继承了Super 类而且有一个和它父类同样标识的name()方法,所以Sub 类中的name()方法覆盖了Super 类中的name()方法。变量s2和s3 是Sub 类的一个实例,所以s2.name()和s3.name()的返回值是Dick 。
两个类中的greeting()方法都是静态方法,也称为类方法。尽管事实上Sub 类的greeting()方法具有相同的返回类型、相同的方法名以及相同的方法参数,然而它并不覆盖Super 类的greeting()方法,只是隐藏它。变量s3 被强制转换为Super 型并且Sub 类的greeting()方法没有覆盖Super 类的greeting()方法,因此s3.greeting()的返回值为Goodnight 。
与被隐藏的方法不同,对被覆盖的方法而言,除了它们本身所在的类之外其他任何类都无法访问它们。如要打印Richard,就只能用Super 类的实例s1。
需要注意的几点:
1. 试图用子类的静态方法隐藏父类中同样标识的实例方法是不合法的,编译器将会报错;
2. 试图用子类的实例方法覆盖父类中同样标识的静态方法也是不合法的,编译器同样会报错;
3. 静态方法和最终方法(带关键字final 的方法)不能被覆盖;
4. 实例方法能够被覆盖;
5. 抽象方法必须在具体类中被覆盖。
- Java实例方法被覆盖,静态方法被隐藏
- Java静态方法不能被覆盖
- Java 方法被覆盖时异常特点
- 例——实例方法能够被覆盖
- 方法可以被覆盖,但是属性不会被覆盖
- java ArrayList add()方法数据被覆盖问题
- javascript之调用被覆盖的方法
- 12.5.2 访问被覆盖的方法
- Java中为什么静态方法不能被重写?为什么静态方法不能隐藏实例方法?
- final方法不能被覆盖,可被重载(方法名相同而参数不同)
- final方法不能被覆盖,可被重载(方法名相同而参数不同)
- 构造方法中不应调用可被覆盖的方法
- js原生方法被覆盖,从新赋值原生方法
- textview 的onDraw()方法被重写后,文字被覆盖掉了的解决办法
- ubuntu下resolv.conf文件不能被保存问题(被覆盖及处理方法)
- textview 的onDraw()方法被重写后,文字被覆盖掉了的解决办法
- 构造器决不能调用可被覆盖的方法
- Log4j配置文件被覆盖,log4j.properties无效(检查方法)
- /bin/helloworld: line 1: syntax error: unexpected word (expecting ")")
- 从FE的角度上看输入url后都发生了什么
- FZU Problem 2082 过路费
- SIFT中的尺度空间和传统图像金字塔
- jxl的一些基本操作
- Java实例方法被覆盖,静态方法被隐藏
- POJ3111 K Best 二分搜索
- Android Selector 与 Shape 基本用法
- 【翻译自mos文章】开启dblink的 oracle net trace/tracing --对dblink进行跟踪的方法
- POJ1384 Piggy-Bank
- 新型计算机
- MFC学习笔记(1)——主要类层次
- ssh上传下载文件
- Ubuntu14.04下配置Java开发环境