黑马程序员技术交流社区

标题: private修饰的父类成员子类可以继承吗? [打印本页]

作者: 叶龙    时间: 2014-10-21 20:36
标题: private修饰的父类成员子类可以继承吗?
网上搜了一些答案,理解的不太清晰,哪位帮忙讲一下
作者: 。冰封    时间: 2014-10-21 20:40
父类可以对外提供一个访问方法,对其进行访问。
作者: 亦然半夏    时间: 2014-10-21 21:18
不可以继承,子类可以继承父类的非私有属性和方法
作者: ☆枫の云    时间: 2014-10-21 21:19
不行的,可以用protected
作者: nerveva2000    时间: 2014-10-22 06:42
有四种权限  1 public   2 默认权限  3 protected  4private

继承关系的话,子类只能访问到父类的前三种权限,也就是 1 public   2 默认权限  3 protected
第四种4private ,默认情况下,只有父类内部可以访问,继承关系也不能访问。

如果要子类访问4 private,那就要提供一个方法,赋予1 public   2 默认权限  3 protected 三个权限中的一个,供子类访问用。  
作者: 康师傅-蛋黄派    时间: 2014-10-22 07:25
当复习一遍,都忘掉了呢
作者: HM2014nuli    时间: 2014-10-22 07:48
子类是继承不到的,因为由于父类将成员私有化了,所以子类在继承的时候根本就不知道父类有这个成员
作者: 杨佳名    时间: 2014-10-22 09:20
有搜索的功夫,demo一下就知道了。自己探寻代码中的快乐。
作者: Fightingforever    时间: 2014-10-22 09:33
不可以的  直接试一下就可以
  1. class Fu
  2. {
  3.         private int num=4;
  4.         String name="lisi";
  5.         }
  6.        
  7. class Zi extends Fu
  8. {
  9.         private int age=10;
  10.         public void method()
  11.         {
  12.                 System.out.println(num);
  13.                 }
  14.         }
  15.        
  16. class Demo
  17. {
  18.         public static void main(String[] args)
  19.         {
  20.                 Zi z=new Zi();
  21.                 z.method();
  22.                 }
  23.         }
复制代码

提示是:num可以再Fu中访问private
作者: yun15120    时间: 2014-10-22 10:18
private是其他类看不到,未知的,故而不能继承吧
作者: EDDY_Liang    时间: 2014-10-22 10:19
只要记住私有的只能在本类中使用就O了
作者: 饼子    时间: 2014-10-22 13:51
私有成员是属于父类自己的,子类不能直接继承。但是可以通过自定义方法获取。
作者: diaolinan    时间: 2014-10-22 16:45
知识点,果断收藏
作者: cvnmklop    时间: 2014-10-22 17:04
这个问题我用反射来证明下首先来一段子父类代码
  1. package Try;

  2. public class Student extends Person {
  3.         String name = "aa";
  4. }

  5. class Person {
  6.        
  7.         private int age =5;
  8.        
  9. }
复制代码
然后用反射来看看Student里有没有被private修饰的age,以下代码有用到junit来调试。顺便就是练习反射了:lol
  1. package Try;

  2. import java.lang.reflect.Field;

  3. import org.junit.Test;


  4. public class Try {

  5.         @Test
  6.         public void test() throws Exception{
  7.                
  8.                 Student st = new Student();
  9.                
  10.                 Class clazz = Class.forName("Try.Student");
  11.                
  12.                 Field fi =clazz.getDeclaredField("age");
  13.                
  14.                 fi.setAccessible(true);
  15.                
  16.                 int age = (Integer)fi.get(st);
  17.        
  18.                 System.out.println(age);
  19.                
  20.         }

  21. }
复制代码
运行的时候就会抛出异常:java.lang.NoSuchFieldException: age

这里就可以看出子类没有继承父类的age





作者: mingtianrsm    时间: 2014-10-22 17:55
我感觉,是可以继承的,不过不能访问。可能有点迷糊,其实我也不知道这算不算继承。我只能说即使是private了,但是,继承之后其实子类还是拥有了,只是不能直接调用而已。我的意见是有没有继承,和可不可以直接调用应该区分对待。就像一个学生类继承了一个Person类,Person类的属性都是私有的,那你不能说学生类没有继承它的属性。毕竟我们继承父类的属性不是要在子类内部调用的,而是要在其它类里使用的,当我们创建子类对象后,连子类自身的私有属性和方法也不能直接调用,我们总不能说它没有这些属性和方法吧?所以,要把这两个概念区分清楚,私有和继承是没有直接联系的,私有是对外部访问的限制。打个比喻,比如家里的东西,老爸的钱锁在柜子里面,这就相当于私有,儿子继承了父亲的财产,那么他能当是继承了这个家所有的东西,难道因为钱在柜子里就不是了吗?这是父类提供的方法其实就是老爸给的柜子钥匙罢了。

作者: Sxxjava    时间: 2014-10-22 18:17
不可以继承,子类可以继承父类的非私有属性和方法
作者: 皮三藏    时间: 2014-10-22 21:33
父类的私有域,子类是不能访问和继承的




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