黑马程序员技术交流社区

标题: 调用报错 [打印本页]

作者: 付星    时间: 2012-1-3 17:42
标题: 调用报错
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);//为什么报错?
}
}
作者: 李盈科    时间: 2012-1-3 17:56
Derived()中的className 访问权限是 private, 当然不能通过对象来访问了,只能在类内部访问的。
作者: 詹英鹏    时间: 2012-1-3 18:26
你神明的className变量是类内部私有属性,只能通过内部的函数获得
在其他类外部不恩能够直接访问
建议你看一下private的用法
下面是个例子
public class PrivateTest {
private void print() {
System.out.println("this is a private method");
}
}

  在该类中,有一个private方法print,如果按照一般的new生成该类的实例,
显然是无法使用print方法的.一个方法被声明为private就意味着该方法将不对外界公开
作者: 罗全涛    时间: 2012-1-3 18:37
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这个字段的访问权限设置成了私有,除了自己类能访问其他类都不能
访问这个字段,而你在类外调用,自然报错。
作者: 刘健    时间: 2012-1-3 18:49
你的classname是私有的,要反射出来只能通过暴力反射了
作者: 为梦而战    时间: 2012-1-3 18:49
本帖最后由 为梦而战 于 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);
}
}
作者: 沈样    时间: 2012-1-3 22:43
private是不是对外部访问,如果你需要返回这个值,可以定义一个getXX()方法来专门返回classname的值
作者: 颜宗茂    时间: 2012-1-3 22:59
外部类不能访问另一个类对象的私有成员变量。
作者: lvwenwen88    时间: 2012-1-4 20:54
是因为在类外调用了用private修饰的成员了。这是不允许的




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