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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 彭彪 于 2013-9-24 20:10 编辑
  1. package com.study;

  2. class Parents{
  3.         private final void doit(){
  4.                 System.out.println("父类.doit()");
  5.         }
  6.         final void doit2(){
  7.                 System.out.println("父类.doit2()");
  8.         }
  9.         public void doit3(){
  10.                 System.out.println("父类.doit3()");
  11.         }
  12. }
  13. class Sub extends Parents{
  14.         public final void doit(){        //在子类中定义一个doit()方法
  15.                 System.out.println("子类.doit()");
  16.         }
  17. //        final void doit2(){                //final方法不能覆盖
  18. //                System.out.println("子类.doit2()");
  19. //        }
  20.         public void doit3(){
  21.                 System.out.println("子类.doit3()");
  22.         }
  23. }
  24. public class FinalMethod {
  25.         public static void main(String[] args) {
  26.                 Sub s = new Sub();        //实例化
  27.                 s.doit();        //调用doit()方法
  28.                 Parents p = s;        //执行向上转型操作
  29. //                p.doit();        //不能调用private方法
  30.                 p.doit2();
  31.                 p.doit3();
  32.         }

  33. }
复制代码
从实例可以看出,final 方法不能被覆盖,例如,doit2()方法不能在子类中被重写,但在父类中定义了一个private final 的doit()方法,同时在子类中也定义了一个doit()方法?

搜狗截图20130923123107.png (58.03 KB, 下载次数: 60)

搜狗截图20130923123107.png

评分

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

查看全部评分

6 个回复

正序浏览
chensc 金牌黑马 2013-9-24 09:15:17
7#
学习学习!
回复 使用道具 举报
这样解释吧,带有private的父类doit方法,应该看作是父类私有的方法,不存在覆盖的问题,因为你根本看不到。而没有加private修饰的doit2默认是friend限制级别,可以覆盖,所以在子类中写doit2方法编译不通过。
回复 使用道具 举报
public class FinalMethod {

        public static void main(String[] args) {

                Sub s = new Sub();        //实例化

                s.doit();        //调用doit()方法,这里输出的结果是“父类.doit()");”

                Parents p = s;        //执行向上转型操作

//                p.doit();        //不能调用private方法

                p.doit2();

                p.doit3();

        }



}

Sub类的doit()方法并不能覆盖父类Parents的doit()方法,这两个doit()方法之间并不存在覆盖关系。由于,父类Parents的doit()方法是private的,JVM首先在sub实例对象时无法找到匹配的doit()方法,所以就直接调用其父类的doit()方法。

不光是private的方法不能重载,static, final都不能重载

回复 使用道具 举报
哥们,private你就当他是隐身宝石就行. 只在本类中能被调用.所以除了本类的话,其他类是看不到的.
回复 使用道具 举报
子类中的doit()方法,是子类的一个特有方法,不是覆盖父类的doit()方法,把父类doit()前的private 改成public,这是子类覆盖父类的doit()方法,编译就不能通过了;
回复 使用道具 举报
哥们,这肯定不行呀,不能覆盖,这就是两个方法而已,你不行你给子类那个方法上加上@Override
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马