A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 叶龙 中级黑马   /  2014-10-21 20:36  /  2898 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

网上搜了一些答案,理解的不太清晰,哪位帮忙讲一下

评分

参与人数 1黑马币 +3 收起 理由
杨佳名 + 3 赞一个!

查看全部评分

16 个回复

倒序浏览
父类可以对外提供一个访问方法,对其进行访问。
回复 使用道具 举报
不可以继承,子类可以继承父类的非私有属性和方法
回复 使用道具 举报
不行的,可以用protected
回复 使用道具 举报
有四种权限  1 public   2 默认权限  3 protected  4private

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

如果要子类访问4 private,那就要提供一个方法,赋予1 public   2 默认权限  3 protected 三个权限中的一个,供子类访问用。  

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
当复习一遍,都忘掉了呢
回复 使用道具 举报
子类是继承不到的,因为由于父类将成员私有化了,所以子类在继承的时候根本就不知道父类有这个成员
回复 使用道具 举报
有搜索的功夫,demo一下就知道了。自己探寻代码中的快乐。
回复 使用道具 举报
不可以的  直接试一下就可以
  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

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 实践出真知

查看全部评分

回复 使用道具 举报
private是其他类看不到,未知的,故而不能继承吧
回复 使用道具 举报
只要记住私有的只能在本类中使用就O了
回复 使用道具 举报
饼子 中级黑马 2014-10-22 13:51:33
12#
私有成员是属于父类自己的,子类不能直接继承。但是可以通过自定义方法获取。
回复 使用道具 举报
知识点,果断收藏
回复 使用道具 举报
这个问题我用反射来证明下首先来一段子父类代码
  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




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