黑马程序员技术交流社区

标题: 求前辈帮忙解决关于继承的一个小问题 [打印本页]

作者: 差不多冬至    时间: 2015-7-26 12:05
标题: 求前辈帮忙解决关于继承的一个小问题
问题? private 或者final 修饰的属性或者方法 可以被子类继承么。
class fu {
            private int age ;
           public int getAge(){
                     return age ;
                  }
           public void setAge(int age){
                   this.age = age;
                 }
            }
class zi extend fu{
  }
class Demo{
     public static void main(String[] args){
     zi z = new zi();
     z.setAge(30);
   }
这段代码中子类调用了父类的setAge方法 ,给age重新赋值,我搞不懂,这个age是子类中的属性么,还是说赋值的是父类中的属性。


作者: 醉翁之意不在酒    时间: 2015-7-26 12:05
private修飾的方法和屬性,子類是不可見的,子類見到的是父類的方法getAge();就像測試類也能調用getAge()一樣。
final修飾的方法是不能被重寫,不是不能被調用。通過子類的變量,一樣可以調用父類的final方法。
另外,你的繼承extends寫錯了偶。
作者: 香港胖仔    时间: 2015-7-26 13:55
当然是子类中的属性了呀1
作者: mengxun    时间: 2015-7-26 14:28
age是父类中的属性,子类调用父类公有的方法
子类继承父类同时也就具备了父类中非私有的属性和方法。被私有修饰是不能被子类继承的。所以父类中的age不可能被子类继承
作者: 悲伤丿心    时间: 2015-7-26 14:38
private 或者final  修饰符 是不能被任何子类 继承的
private  私有的 的意思,我私有的东西,怎么可能让别人随便用呢
final 最终的,都已经使最终了,那怎么会被继承走了
你问题中的age是父类的,你子类用的是父类的方法,而不是用了age,所以你子类的对象是无法直接操作age 的

作者: nightingale    时间: 2015-7-26 15:00
private:成员修饰符,被private修饰的成员不可被子类继承。
final:修饰不同的对象,有不同表现:
1.修饰属性时,不可被修改。(可以被子类继承)
2.修饰方法时,不可被重写。(方法可以重载,被子类继承可以继承)
3.修饰类时,不可被继承。
楼主问的问题就就看拿来修饰什么了。
作者: 差不多冬至    时间: 2015-7-26 16:04
mengxun 发表于 2015-7-26 14:28
age是父类中的属性,子类调用父类公有的方法
子类继承父类同时也就具备了父类中非私有的属性和方法。被私有 ...

也就是说子类并没有age的属性,生成对象时,产生的是父类的属性,调用修改的也是父类的属性。
作者: DD_vincent    时间: 2015-7-26 16:42
private跟final都是不能被子类调用修改的,这体现了java的封装性。
而父类会提供public的方法,来设置这些private的成员变量。

你所说的age变量,其实是子类从父类继承下来的private变量,也就变成了子类的私有变量。这时候是调用父类的setAge()方法来给age这个变量赋值。所以是给子类自己的变量赋值,而不是更改了父类私有变量的值
作者: libin    时间: 2015-7-26 17:07
简单点来说,子类继承了父类,子类就拥有了父类中的所有东西,age是父类的成员变量,也是子类的。但这里要注意一点:构造函数,子类默认继承父类空参数的构造函数,有参数的构造函数,必须敲出代码。
作者: mengxun    时间: 2015-7-26 20:45
差不多冬至 发表于 2015-7-26 16:04
也就是说子类并没有age的属性,生成对象时,产生的是父类的属性,调用修改的也是父类的属性。 ...

至少这个代码里面age属性是父类的而且子类无法继承
作者: 392225327    时间: 2015-7-26 21:29
private 或者final 修饰的属性或者方法不可以被继承
作者: fighting8    时间: 2015-7-27 00:01
这道题是关于类的封装及继承的问题:
1.题中的private将age私有化了,也就是说age只能在fu类中被访问(setAge和getAge提供了访问age的方式),不能被其它的类访问(包括题中继承fu类的zi类),所有子类通过访问setAge和getAge来间接访问age的值;
2.继承的概念:指在一个现有类的基础上去构建一个新的类,构建出的新类被称为子类,现有的类称作父类,子类会自动拥有父类所有可继承的属性和方法。

所以访问的是父类的age。



作者: xiaoshaoye    时间: 2015-7-27 15:52
首先 extends  要写对啊。。。。子类中没有 继承 age ,  只是通过方法 的修改和得到,父类中的私有属性
作者: xqtzzl521    时间: 2015-7-27 22:32
本帖最后由 xqtzzl521 于 2015-7-29 22:28 编辑

age定义在父类中,父类中放的是多个类存在的相同的属性和行为,所以age是所有子类的属性
但是private修饰的属性和方法是不能被子类继承的

作者: lizhichao    时间: 2015-7-28 16:05

1) final修饰的类不能被继承
2) final修饰的变量其值不能被改变
3)final修饰的局部变量有利于垃圾回收


private是私有的意思
private修饰的方法或者变量不能被创建对象调用
private不能修饰抽象方法;
作者: 15225159271    时间: 2015-7-29 14:58
是的,继承后就有了age属性
作者: 陈熙    时间: 2015-8-1 22:53
不可以  因为子类继承要被重写   private修飾的方法是被私有的所以不能被继承   final修飾的方法是不可以被重写  
作者: 陈熙    时间: 2015-8-1 22:55
陈熙 发表于 2015-8-1 22:53
不可以  因为子类继承要被重写   private修飾的方法是被私有的所以不能被继承   final修飾的方法是不可以被 ...

太棒了                        



太棒了          解释的太好了                 










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