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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 付星 黑马帝   /  2012-1-3 17:42  /  2363 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Base {
public String className = "Base";
}
class Derived extends Base {
private String className = "Derived";
}
public class PrivateMatter {
public static void main(String[ ] args) {
System.out.println(new Derived().className);//为什么报错?
}
}

8 个回复

倒序浏览
Derived()中的className 访问权限是 private, 当然不能通过对象来访问了,只能在类内部访问的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
你神明的className变量是类内部私有属性,只能通过内部的函数获得
在其他类外部不恩能够直接访问
建议你看一下private的用法
下面是个例子
public class PrivateTest {
private void print() {
System.out.println("this is a private method");
}
}

  在该类中,有一个private方法print,如果按照一般的new生成该类的实例,
显然是无法使用print方法的.一个方法被声明为private就意味着该方法将不对外界公开

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
class Base {
public String className = "Base";
}
class Derived extends Base {
private String className = "Derived";
}
public class PrivateMatter {
public static void main(String[ ] args) {
System.out.println(new Derived().className);
}
这里报错是因为你把Derived类中的className这个字段的访问权限设置成了私有,除了自己类能访问其他类都不能
访问这个字段,而你在类外调用,自然报错。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
你的classname是私有的,要反射出来只能通过暴力反射了
回复 使用道具 举报
本帖最后由 为梦而战 于 2012-1-3 18:51 编辑

上面的同学已经把问题指出了,你确实是因为在类外调用了用private修饰的成员了。这是不允许的,下面是我写的简单的两种实现方式供参考:
代码一:使用了一个public方法来获取私有成员

class Base
{
        public String className = "Base";
}
class Derived extends Base
{
          private String className = "Derived";
        public String getclassName()
        {
                return className;

        }
}
public class PrivateMatter1 {
public static void main(String[ ] args) {
System.out.println(new Derived().getclassName());
}
}
代码二:不使用方法,成员上什么修饰也不加。
class Base {
public String className = "Base";
}
class Derived extends Base {
String className = "Derived";
}
public class PrivateMatter {
public static void main(String[ ] args) {
System.out.println(new Derived().className);
}
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
沈样 黑马帝 2012-1-3 22:43:17
7#
private是不是对外部访问,如果你需要返回这个值,可以定义一个getXX()方法来专门返回classname的值
回复 使用道具 举报
外部类不能访问另一个类对象的私有成员变量。
回复 使用道具 举报
是因为在类外调用了用private修饰的成员了。这是不允许的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马