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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宁超 黑马帝   /  2011-10-14 12:34  /  2134 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

敖东 黑马帝 2011-10-14 14:00:37
楼主
NewMethod类继承了Method,也就是说子类中也有method2这个方法,主函数调用的是子函数里面的method2方法
回复 使用道具 举报
private只是本类访问,protected才是继承类;
private是私有的,其他类是不能访问的,子类也不可以访问,所以你可以重新实现父类的该方法,不会有冲突,但是你重新实现的方法,不叫覆写,是一个该子类新增的方法,和子类的一般扩展方法一样,所以它就执行父类中的method1啦.
可以这么说吧:从父类的private到default或者或者到protected或者到public都不是覆写;

评分

参与人数 1技术分 +1 黑马币 +1 收起 理由
admin + 1 + 1

查看全部评分

回复 使用道具 举报
宁超 黑马帝 2011-10-14 13:42:18
藤椅
敖东 发表于 2011-10-14 13:37
private关键字的定义是“除了包含该成员的类之外,其他任何类都无法访问这个成员.”,也就是说只有自己才能 ...

如果是public
那NewMethod类中没有覆盖父类中的method2方法,意味着主函数调用的是父类中method2方法,而method2应该调用的是父类中的method1吧?

评分

参与人数 1技术分 +1 黑马币 +1 收起 理由
admin + 1 + 1

查看全部评分

回复 使用道具 举报
敖东 黑马帝 2011-10-14 13:37:53
板凳
private关键字的定义是“除了包含该成员的类之外,其他任何类都无法访问这个成员.”,也就是说只有自己才能直接访问到private成员,其他任何类,包括子类都无法访问到这个成员。

所以父类的 method1是无法被子类覆盖的

评分

参与人数 1技术分 +1 黑马币 +1 收起 理由
admin + 1 + 1

查看全部评分

回复 使用道具 举报

  1. public class OverDemo
  2. {
  3.         public static void main(String args[]){
  4.                 new NewMethod().method2();
  5.                
  6.         }

  7. }
  8. class Method{
  9.         public void method1(){
  10.                 System.out.println("方法一");
  11.         }
  12.         public void method2(){
  13.                 method1();
  14.         }
  15. }
  16. class NewMethod extends Method{
  17.         public void method1(){
  18.                 System.out.println("方法三");
  19.         }
  20. }
复制代码
结果是输出是 方法三

  1. public class OverDemo
  2. {
  3.         public static void main(String args[]){
  4.                 new NewMethod().method2();
  5.                
  6.         }

  7. }
  8. class Method{
  9.         private void method1(){
  10.                 System.out.println("方法一");
  11.         }
  12.         public void method2(){
  13.                 method1();
  14.         }
  15. }
  16. class NewMethod extends Method{
  17.         public void method1(){
  18.                 System.out.println("方法三");
  19.         }
  20. }
复制代码
输出方法是 方法一
private void method1(){
                System.out.println("方法一");
        }

不懂的是 private 和public 为什么带来的结果不同

4 个回复

倒序浏览
您需要登录后才可以回帖 登录 | 加入黑马