黑马程序员技术交流社区

标题: 继承问题,父类成员用private修饰和final修饰 [打印本页]

作者: 别让生命去等待_    时间: 2011-11-12 14:09
标题: 继承问题,父类成员用private修饰和final修饰
子类继承后有什么不同?不都是不能修改父类的内容么?
作者: 别让生命去等待_    时间: 2011-11-12 14:15
主要是final的方法问题?final的方法不能被复写,用private修饰的方法,子类不也是不知道么?不就不存在复写。
要是不想子类继承父类的方法,什么情况下用final,什么时候用private?
作者: 咪咪    时间: 2011-11-12 14:45
final是一个最终修饰符用他修饰的变量和方法是不能被修改和覆盖的,但可以继承一般父类里的成员用他修饰就说明该成员是共有的,无论哪个子类继承都不能变,比如声明一个电脑类,该类的一个成员是cpu那么如果说生产cpu的厂家只有inter以后无论出现任何一个电脑的子类都是inter无法改变那么cpu这个成员就可以定义为final.至于private是对成员权限的控制,如果父类中的成员用private修饰说明该成员相对比较隐秘,不想让外不直接获得这样提高了安全性,但是子类也是可以继承的。
作者: 坚强    时间: 2011-11-12 15:43
  用final和private修饰的成员,子类都不能去修改,不同的是,用仅用final修饰的成员子类中有访问权,用private修饰的成员子类没有访问权,我看书上的说法是,用private修饰的成员在子类中是存在的,但被隐藏了,我觉得其实就是没有。用final修饰的子类中依然有
作者: 别让生命去等待_    时间: 2011-11-12 15:50
哦了,有无访问权限
作者: 胡文杰    时间: 2011-11-12 15:53
其实说白了就是一个final修饰的也就是一个常量,可以被子类所读到,但是不能修改,它在内存中是一个不能值不能改变的数据,而用private修饰则是自己所属,可以在父类中写方法来访问或者改写,但是不能被子类直接读写!
作者: 张翼    时间: 2011-11-12 19:40
其实,不太容易搞混,private修饰,表示该该成员仅仅可以被父类中对象和方法使用,子类不可以使用;
例子:
class acc1
{
          private int i=1;
          public void abc()
          {
                  System.out.println("a");
          }
}
public class acc extends acc1
{
        public static void main(String argv[])
        {
                acc a=new acc();
                a.i;//这里编译发生错误
                a.abc();//这里没有发生错误
        }
}
//其实i和abc都是父类的成员,区别仅仅是i是私有的,所以子类不可以继承它。

final修饰属性表示该属性是常量,重新赋值将导致错误,如果修饰方法表示该方法在子类中无法再被覆盖,但是继承它并且使用却是没有问题的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2