日期:2014-05-20  浏览次数:20644 次

隐藏和覆盖如何区别?
请问隐藏和覆盖如何区别?

------解决方案--------------------
两个不同的概念
隐藏是指把一些逻辑处理细节或某个关键属性用非public关键字隐藏起来(private是对所有其他类隐藏,protected是对包外隐藏子类和同包不隐藏,什么关键字都没有是对包外和子类隐藏同包不隐藏),这样以避免外界处理直接访问这些属性或方法而导致意外的处理结果。隐藏可以对一个类而言,也可以对一个类的子类而言,即可以说某个类把某某属性或方法隐藏起来,也可以说某个子类把父类的某某属性或方法隐藏起来。
覆盖是针对子类而言的,也就是子类重新定义了某个与父类相同名字的属性或方法,这样,访问子类实例的从父类继承下来的属性和方法时,只能访问到子类本身覆盖过的属性和方法,父类的属性和方法就访问不到了,这种情况下,从某种意义上也算是把父类的属性或方法隐藏。但是这种隐藏并非真正意义地隐藏(也就是上面说的隐藏),而是覆盖导致的结果。


------解决方案--------------------
楼上的对隐藏解释有问题,不是楼主要问的意思。

我觉得,楼主说的隐藏是指继承时子类隐藏父类的属性或者方法。就java而言,只能隐藏属性,不能隐藏方法,因为方法会变成覆盖。

Java code

public class A {
  public int x;
}
public class B extends A {
  public int x;
}

------解决方案--------------------
隐藏针对成员变量。
覆盖针对方法。