xiaopan
发贴: 71
积分: 20
|
于 2003-03-18 09:49
JAVA作为面向对象的语言,最重要的的三个概念就是封装、继承、多态。在这里我想对继承中容易模糊的问题做一下补充: 大家在使用继承时,都知道父类中访问修饰符声明为PUBLIC,PROTECT的数据成员和方法可以被子类直接访问,但是PRIVATE的变量和方法就不能被访问,以上的说法其实是不正确的。其实子类通过extends继承了父类,子类会把父类中所有的方法和数据成员作一份拷贝变成自己的东西,无论父类中的声明为什么,PRIVATE修饰的在子类中只是不能被直接使用罢了,如果继承过来的public方法中有使用某个private变量,那么在子类中就能被访问,只是通过继承来的方法罢了。所以说继承是把父类的任何东西都作了一份拷贝在子类中,只是有的可以直接使用,有的不能直接使用。 第二,继承完之后,子类的东西是子类自己的,父类的是父类的,两者之间不会相互影响。比如:父类有一个public int i = 5变量,在子类中通过使用super.i=6会不会把父类的 i 改变为6呢?当然是不会的,子类中的 i 和父类的 i 的关系只是前者是后者的一个拷贝罢了,拷贝晚了之后,其实是没有关系的,不会相互影响;如果在子类中也声明了public int i 又将是什么情况呢? 这时候,在子类中实际上有两个 i 一个是他自己的,另为一个是父类的拷贝,两者是同名同姓的,但是通过this 和 super区分,不会相互混淆。这种情况发生方法就是所谓方法覆盖或重写,但是,实际上子类还是有两个方法(注意是两个),默认使用的覆盖后的方法。
|