继承关系中的方法覆写

方法覆写的原则(一同两小一大)

一同:方法签名必须相同

两小:子类方法声明的返回值类型是和父类方法的返回值相同或者是其子类

子类方法抛出的异常类型和父类方法声明抛出的异常类型相同或是其子类

一大:子类方法的访问权限比父类方法访问权限相等或更大.


判断是否是覆写方法的必杀技:@Override标签;

若方法是覆写方法,在方法前贴上该标签,编译通过,否则编译出错.

看如下代码:

superCLass clz = new subClass();

clz.doWork(),究竟会产生什么情况呢?

注意clz的编译类型是superClass,真是类型是subClass

1.父类存在该方法,而且没被private修饰,换句话说能被继承。会执行父类的方法

2.父类中没有该方法,子类中有该方法。编译出错,因为编译器回去检查声明类型中即父类有没该方法,没有则报错。

3.父类和子类都有该方法,多态,运行时表现出子类的具体特征,也就是调用子类的doWork()

3.父类和子类都有该方法,而且是静态的。此时会执行父类的方法。对象调用静态方法,实际上还是类名调用。clz的编译类型是superClass,所以执行父类的doWork()

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,145评论 1 32
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,645评论 8 265
  • 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
    Ethan_Struggle阅读 2,232评论 0 7
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,267评论 0 2
  • 孩子的生活阅历不足,他们对于时间天生有一种“感知惰性”, 在他们眼里,时间仿佛是不存在的。 做一张表格,这是一种可...
    宫晓杰阅读 157评论 0 0