覆盖就是传说中的术语"override",重写父类的某个方法。。

解决方案 »

  1.   

    我自己写的一个例子,就是override父类的private方法,编译和运行并没有提示什么错误啊!
      

  2.   

    final方法是不可以不重写的,因为私有方法你在子类中你根本就不能访问,所有当然也就不会不覆写
      

  3.   

    我自己写的一个例子,就是override父类的private方法,编译和运行并没有提示什么错误啊!
    ---那把你的代码帖出来看卡
      

  4.   

    我自己写的一个例子,就是override父类的private方法,编译和运行并没有提示什么错误啊!
    -------这句话是正确的。因为private是一个类的私有方法,它的子类完全看不到它的private方法。当子类定义一个与父类的私有方法同名的函数时,编译器把它当成一个全新的函数来看待。这样做是没有错误的。
    有代码如下:
    class Super{
    private void method(){
    System.out.println("super");
    }
    }
    public class TestPrivate extends Super{
    public void method(){
    System.out.println("sub class");
    }

    public static void main(String[] args){
    TestPrivate obj1 = new TestPrivate("abc");
    obj1.method();
    }
    }
    正确编译,输出结果为:
    sub class
      

  5.   

    对了,上面TestPrivate obj1 = new TestPrivate("abc");
    改为TestPrivate obj1 = new TestPrivate);
      

  6.   

    那么这句话:
    类内所有private 方法都自动成为final。由于我们不能访问一个private 方法,所以它绝对不会被其他方法覆盖(若强行这样做,编译器会给出错误提示)。怎么解释呢,这是书上的原话!
      

  7.   

    这句话括号外面的部分完全正确。至于括号内的部分,不知道是谁加的。
    我有一个疑问是:如何能“强行”覆盖一个private方法?
      

  8.   

    Thinking in Java(2nd)中的原文为 
    Any private methods in a class are implicitly final. Because you can’t access a private method, you can’t override it (even though the compiler doesn’t give an error message if you try to override it, you haven’t overridden the method, you’ve just created a new method). 
    注意这里用的是implicitly(含蓄地、暗中地),意思应当是说所有的private方法其实都是final的,因为这些private方法不会(而不是不能)被覆盖。括号里的话就更清楚了——当你试图覆盖它(private方法)时,即使编译器没有给出错误信息,你实际上也没有真的覆盖掉这个方法,你只是创建了一个新的方法。
      

  9.   

    TO Tasia(这里是CSDN吗?) 我看的是电子书,一个字不落的拷贝下来的,我的疑问和你一样,不知道有没有人能解答一个
      

  10.   

    Tasia的程序很有意思,揭露了Java中一些很有意思的东西,我把Tasia的程序改了改
    class Super{
    private void method(){
    System.out.println("super");
    }
    public void call(){
    method();
    }
    }
    public class Child extends Super{
    private void method(){
    System.out.println("chile");
    }
    }
    然后再在另一个类里调用
    Super a = new Super();
    Super b = new Child();
    a.call();
    b.call();
    结果是
    super
    super
    也就是说Child类里试图覆盖Super里的private void method()失败了
      

  11.   

    你看的中文版电子翻译有问题。
    mor(安稼)列出的原版内容说的是:
    类中任何private方法都是final,因为你不能访问一个private方法,所以你不能覆盖它(虽然当你试图覆盖一个private方法时,编译器没有给出错提示,但你并没有覆盖这个方法,你只是创建了一个新的方法而已。)
    这个是正解。
      

  12.   

    然后我再修改一下Child类,改成
    public class Child extends Super{
    private void method(){
    System.out.println("chile");
    }
    public void call(){
    method();
    }
    }
    这回的结果就是
    super
    child
    大家可以看出点问题了吧
      

  13.   

    其实,说白了private方法只可以在类的内部使用,在类外根本访问不到,而final方法可以在类外访问,但是不可以重写该方法,就是说可以使用该方法的功能但是不可以改变其功能,这就是private方法和final方法的最大区别如:
    class One{
          final a(){
             ....}
          private b(){
             ....}
    }
    class Two{
          One one=new One();
          one.a;//可以实现
          one.b;//不可以实现
    }
      

  14.   

    private的方法子类不能够继承~~~
    final的 方法子类不能重写
    final的类不能被继承
    final的变量只能覆值一次,不可以改变,相当于常量
      

  15.   

    所以说Thinking in Java翻译得臭呢...