码迷,mamicode.com
首页 > 编程语言 > 详细

thinking in java 读书笔记 --- overriding private method

时间:2014-05-12 11:56:15      阅读:379      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   c   

一个对象可以被用作它自身的类型或者是它的基类类型。当用作它的基类类型时叫做upcasting,如下所示

BaseClass ref = new DerivedClass()  //upcasting

当执行ref.method 时,程序会先到DerivedClass中去寻找method,当找到时就执行,找不到时就会到BaseClass 中找是否有method(该method必须是对DerivedClass是可见的),如果有则执行。

BaseClass 中的private方法只能被基类中的方法调用,对DerivedClass是不可见的。因此DerivedClass无法override BaseClass中的private方法,也不能通过 upcasting来调用基类中的private方法。

基于上述的原因,下面的例子是无法编译通过的:

bubuko.com,布布扣
public class test {

    public static void main(String[] args){
        test1 t = new test2();
        t.f();
    }
}

class test1{

    private void f(){
        System.out.println("test1 private f()");
    }
}

class test2 extends test1{
    public void f(){
        System.out.println("test1 public f()");
    }
}
bubuko.com,布布扣

然而书中的一个例子却给出了意外的结果:

bubuko.com,布布扣
public class PrivateOverride{
    private void f(){
        System.out.println("PrivateOverride private f()");
    }
    public static void main(String[] args){
        PrivateOverride po = new Derived();
        po.f();
    }
}

class Derived extends PrivateOverride{
    public void f(){
        System.out.println("Derived public f()");
    }
}
bubuko.com,布布扣

执行结果为:

PrivateOverride private f()

看起来违背了开始描述的理论,但是经过分析过后发现,上例中的upcasting 和 方法的调用是在基类中进行的,在基类中可以访问基类的私有方法。

还有一点需要说明,派生类overrid基类中的方法时,其权限只能大于等于基类中该方法的权限

也就是说,当基类中方法的权限为protected时,派生类重写该方法时,权限必须为protected 或者是 public.

thinking in java 读书笔记 --- overriding private method,布布扣,bubuko.com

thinking in java 读书笔记 --- overriding private method

标签:style   blog   class   code   java   c   

原文地址:http://www.cnblogs.com/cruze/p/3720376.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!