黑马程序员技术交流社区

标题: override 和 hidden的讨论 [打印本页]

作者: 奥特曼爱小怪兽    时间: 2012-4-26 13:50
标题: override 和 hidden的讨论
override用于实现多态,hidden机制呢,它和override的区别在哪里呢,
override针对继承关系中,具有相同方法名,相同标签的方法,那么hidden针对的是什么呢
大家来讨论下
作者: 党传才    时间: 2012-4-26 13:57
覆盖(override):发生在父类和子类之间,而且是针对实例方法(即非静态方法)而不是域(数据成员)而言。
构成覆盖要满足以下条件:
1、父类中的static方法不可以被覆盖;
2、父类中的final方法不可以被覆盖;
3、方法的签名、参数个数以及参数类型都要相同;
     对于返回类型要说明两点:
     1)如果返回类型是引用类型,则覆盖方法的返回类型可以声明为父类方法声明的返回类型的子类型;
     2)如果返回类型是基本类型,则覆盖方法的返回类型必须和父类方法的返回类型相同; 对于方法参数     的说明:不管父类方法中的参数是否是final的,
       子类都可以修改这个参数;
4、子类方法的访问权限要大于等于父类的访问权限;
5、子类方法可以改变某些方法修饰符,如:synchronized、native和strictfp。
6、子类方法的throws子句可以和父类方法不同,它列出的每一个异常类型都应该和父类中的异常类型相同或者是父类异常类型的子类;

隐藏(hidden):发生在父类与子类之间,而且只是针对静态成员(静态方法和静态域(类变量))。
说明:被声明为final的类方法不可以被隐藏。 实例方法被子类的方法覆盖时,实际被调用的方法是在执行时决定的。 类方法被子类的方法隐藏时,
实际被调用的方法是在编译时决定的。
作者: 王敏NO.09    时间: 2012-4-26 17:03
Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。
hidden发生在父类与子类之间,且只针对静态成员




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2