A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mayor125 金牌黑马   /  2013-11-8 15:57  /  1057 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 mayor125 于 2013-11-8 16:19 编辑

方法覆写的时候必须考虑到子类和父类方法中权限的问题,就是:被子类覆写的方法不能拥有比父类方法更加严格的访问权限。即子类中的同名方法权限不能比父类中的同名方法更小。
例如:
  1. class Person
  2. {
  3.         void print() //父类中默认权限的方法
  4.         {
  5.                 System.out.println("abcdefg");
  6.         }
  7. }
  8. class Student extends Person        //定义一个Person类的子类Student
  9. {
  10.         public void print()        //覆写父类中的方法,拥有最大权限
  11.         {
  12.                 System.out.println("ABCDEFG");
  13.         }
  14. }

  15. class ExtendsDemo2
  16. {
  17.         public static void main(String[] args)
  18.         {
  19.                 Student stu = new Student();
  20.                 stu.print();
  21.         }
  22. }
复制代码
输出结果是:ABCDEFG

疑问:目前我所学到的方法有public、private、默认  这3中,权限大小依次是public > 默认 > private,那么如下代码输出的是什么情况?父类中的方法被覆写了之后,输出的结果是abcdefg
  1. class Person        //定义父类Person
  2. {
  3.         private void print()
  4.         {
  5.                 System.out.println("abcdefg");
  6.         }
  7.         public void show()
  8.         {
  9.                 this.print(); //调用print方法
  10.         }
  11. }

  12. class Student extends Person        //定义一个Person类的子类Student
  13. {
  14.         void print()        //覆写父类中的方法
  15.         {
  16.                 System.out.println("ABCDEFG");
  17.         }
  18. }

  19. class ExtendsDemo3
  20. {
  21.         public static void main(String[] args)
  22.         {
  23.                 Student stu = new Student();
  24.                 stu.show();
  25.         }
  26. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 从前有个人 于 2013-11-8 16:08 编辑

呃…… stu.fun();,,,,, 楼主你在fun我么,,,,

未命名.jpg (50.35 KB, 下载次数: 10)

ABCDEFG

ABCDEFG
回复 使用道具 举报
从前有个人 发表于 2013-11-8 16:06
呃…… stu.fun();,,,,, 楼主你在fun我么,,,,

呃,不好意思,那个地方写错了。。。
应该改成stu.show();但是结果也是一样的。。。。哈哈
回复 使用道具 举报
首先指出一楼理解错误   stu.fun();  楼主应该是要写stu.show();  吧?  
因为父类私有的方法子类是访问不到的 子类相当于有写了一个方法
你在父类show()中使用了this  因为没有覆盖父类的print();
它肯定会使用父类的print();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马