关于java中的覆盖和隐藏

Gary强z 2006-12-05 03:01:44
覆盖和隐藏到底是怎么回事?我在网上查阅了一些资料,但还是没弄明白。谁能给我个确切而肯定回答?
-------------
参考1:http://topic.csdn.net/t/20050821/00/4221052.html
public class classA{
public void methodOne(int i){ }
public void methodTwo(int i){ }
public static void methodThree(int i){ }
public static void methodFour(int i){ }
}

public class classB extends classA{
public static void methodOne(int i){ }
public void methodTwo(int i){ }
public void methodThree(int i){ }
public static void methodFour(int i){ }
}
1 问那些方法隐藏了父类的方法?

2 问那些方法覆盖了父类的方法?
答案:
1 methodFour
2 methodTwo
其他两个方法编译是无法通过的,要么给methodThree,methodOne加上static,要么去掉static.
-----------
参考2:http://topic.csdn.net/t/20051205/08/4437722.html
覆盖和重载完全是两码事!覆盖就是子类的方法跟父类的方法具有完全一样的签名和参数,而重载是签名相同参数不同,可以是同一个类也可以是子类跟父类!
隐藏一般是对成员变量和静态方法来说的,网上的代码:
class Planet {
public static void hide() {
System.out.println("The hide method in Planet.");
}

public void override() {
System.out.println("The overrid method in Planet.");
}
};

public class Earth extends Planet {
public static void hide() {
System.out.println("The hide method in Earth.");
}

public void override() {
System.out.println("The override method in Earth.");
}

public static void main(String[] args) {
Earth myEarth = new Earth();
Planet myPlanet = (Planet) myEarth;
myPlanet.hide();
myPlanet.override();
}
}

...全文
568 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
CpRcF 2006-12-06
  • 打赏
  • 举报
回复
差不多就是这个意思吧。
Gary强z 2006-12-05
  • 打赏
  • 举报
回复
楼上的意思是说:
当子类方法的签名与父类方法的签名和方法相同时,如果方法是非静态成员方法,则是覆盖;否则,就是隐藏。是这意思吗?
那覆盖和隐藏之间还有什么其它具体的区别吗?
CpRcF 2006-12-05
  • 打赏
  • 举报
回复
覆盖(overriding)

一个方法将方法的超类实现替换为自己的实现,其签名必须和超类方法签名相同,但返回类型可以按照某种特定的方式变化。

1)如果返回类型是引用类型,则覆盖方法的返回类型可以声明为超类方法声明的返回类型的子类型;如果返回类型是基本类型,则覆盖方法的返回类型必须和超类方法的返回类型相同。

2)覆盖方法有自己的访问修饰符,但只限于提供更多的访问权限。覆盖方法还可以改变其他方法修饰符,可以随意的改变synchronized、native和strictfp修饰符。不管覆盖方法中的参数是否是final的,子类都可以修改这个参数(参数的final修饰符不属于方法的签名,只是实现的细节)。

3)覆盖方法的throws子句可以和超类方法有所不同,它列出的每一个异常类型都应该和超类中的异常类型相同,或者是超类异常类型的字类型。
CpRcF 2006-12-05
  • 打赏
  • 举报
回复
一个方法将方法的超类实现替换为自己的实现,其签名必须和超类方法签名相同,但返回类型可以按照某种特定的方式变化。

1)如果返回类型是引用类型,则覆盖方法的返回类型可以声明为超类方法声明的返回类型的子类型;如果返回类型是基本类型,则覆盖方法的返回类型必须和超类方法的返回类型相同。

2)覆盖方法有自己的访问修饰符,但只限于提供更多的访问权限。覆盖方法还可以改变其他方法修饰符,可以随意的改变synchronized、native和strictfp修饰符。不管覆盖方法中的参数是否是final的,子类都可以修改这个参数(参数的final修饰符不属于方法的签名,只是实现的细节)。

3)覆盖方法的throws子句可以和超类方法有所不同,它列出的每一个异常类型都应该和超类中的异常类型相同,或者是超类异常类型的字类型。


隐藏字段 :字段不可以被覆盖而只能被隐藏。

可访问性与覆盖 :一个方法只有当它可以被访问时才可以被覆盖。

隐藏静态成员 :类中的静态成员(无论是字段还是方法)不可以被覆盖,只能被隐藏。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧