Jafe Lee
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
49 随笔 :: 0 文章 :: 24 评论 :: 0 Trackbacks
<
2007年7月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(5)
给我留言
查看公开留言
查看私人留言
随笔分类
(50)
Book Notes-- Java Puzzlers(4)
(rss)
Book Notes--Dive Into Python(4)
(rss)
C++(3)
(rss)
Database(12)
(rss)
Groovy(4)
(rss)
J2EE(1)
(rss)
Java(18)
(rss)
Other Techs(3)
(rss)
Python(1)
(rss)
Software Engineering
(rss)
随笔档案
(46)
2008年6月 (3)
2007年12月 (3)
2007年10月 (1)
2007年9月 (18)
2007年8月 (11)
2007年7月 (3)
2007年5月 (7)
文章分类
Groovy
(rss)
Java News
(rss)
Java/J2EE
(rss)
Linux
(rss)
Python
(rss)
搜索
最新评论
1. re: Java Interface
@R.X.B
手敲错了,这样子时可以的,楼主可以试一下
--R.X.B
2. re: Java Interface
int x = 20; //int x; 是不允许的
--R.X.B
3. re: Visual Studio 2005 Express 下的 WinPcap 配置
哥们,谢谢~!
--HeroBack
4. re: Visual Studio 2005 Express 下的 WinPcap 配置
请加入ws2_32.lib静态库
--bunter
5. re: MatLab运算符
我们专业选修时我报了MatLab,第一个星期老师无故说不用上,第二个星期无故说不用上,第三个星期开始我们放假了,到现在我还不知道它是什么东东...好像说是跟C++有关的,是吗?看来我完蛋了,sigh
--juna
评论排行榜
1. MatLab运算符(5)
Java继承
1、关键字super有两个用途:一是调用超类的方法,而是调用超类的构造器。
super不是对一个对象的引用,不能将super赋给另一个对象变量,它只是一个指示编译器调用超类方法的特有关键字。super在构造器中的作用:
public
Manager(String n,
double
s,
int
year,
int
month,
int
day)
{
super
(n, s, year, month, day);
bonus
=
0
;
}
由于构造器不能范围Employee类的私有域(具体例子见本文最后面PersonTest.java),所以必须利用Employee类的构造器对这部分私有域进行初始化
子
,我们可以通过super实现对超类构造器的调用。
使用super调用构造器的语句必须是
类构造器的第一条语句
。如果之类的构造器没有显示的调用超类的构造器,这将自动调用超类默认(没有参数)的构造器。如果超类没有不带参数的构造器,并且在子类的构造器中没有显示地调用超类的其它构造器,则Java编译器将报告错误,这个规则对与abstract base class 也是成立的。
2、关键字this有两个用途:一是引用隐式参数,二是调用该类的其它的构造器。在调用构造器时和super很相似,都只能作为另一个构造器的第一条语句出现。
3、多态。先看例子:
Manager boss
=
new
Manager(
);
Employee [] staff
=
new
Employee[
3
];
staff[
0
]
=
boss;
在这个例子中,变量staff[0]和boss引用同一个对象.但编译器将staff[0]看待成Employee对象.这意味着可以这样调用:
boss.setBonus(5000);
但不能这样调用
staff[0].setBonus(5000);//error,这样会引起一个编译错误
这是因为staff[0]声明的类型是Employee,而setBonus不是Empoyee类的方法。
4、动态绑定:
方法的名字和参数列表被称为方法的签名(signature).如果在子类中定义了一个与超类签名相同的方法,那么子类中的这个方法就覆盖了超类中的这个同签名的方法。但是,返回类型不是签名的一部分,因此在覆盖方法的时候,一定要保证返回类型的兼容性。在JDK 5.0以前的版本中,要求返回类型必须是一样的。而现在允许子类将覆盖方法返回类型定义为原返回类型的子类型。例如,假设Employee类有:
public
Employee getBuddy(){
}
在后面的子类Manager中,可以按照如下所示的方法覆盖这个方法:
public
Manager getBuddy(){
}
//
OK in JDK 5.0
如果方法是private, static, final或者是构造器,那么编译器将可以准确地知道应该调用那个方法。我们将这种调用方式称为静态绑定。但是,子类不能继承父类private (方法,更谈不上覆盖)不能覆盖final修饰的方法,但可一覆盖static方法
覆盖一个方法的时候,子类方法不能低于超类方法的可见性。特别是如果超类得方法是public,那么子类方法一定要声明为public。
posted on 2007-07-22 16:40
Jafe Lee
阅读(723)
评论(0)
编辑
收藏
所属分类:
Java
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
Java 正则表达式 (2) -- Metacharacters & Character Classes
Java 正则表达式 (1) -- java.util.regex.* 介绍
Java Thread (1)
Java Enumeration (枚举类型) (5) -- Value-specific class body
Java Enumeration (枚举类型) (3) -- 自定义类体(class body)
Java Enumeration (枚举类型) (2) -- switch语句
Java Enumeration (枚举类型) (1) -- 基本概念
Java 单元测试
Java点滴 (3)
Java继承
Powered by:
BlogJava
Copyright © Jafe Lee