黑马程序员技术交流社区

标题: private修饰词在静态内部类中的作用范围 [打印本页]

作者: 林林鸦    时间: 2014-3-26 21:02
标题: private修饰词在静态内部类中的作用范围
本帖最后由 林林鸦 于 2014-3-26 21:17 编辑
  1. public interface Null {}

  2. public class Person {
  3.         public final String first;
  4.         public final String last;
  5.         public final String address;
  6.         public Person(String first, String last, String address) {
  7.                 super();
  8.                 this.first = first;
  9.                 this.last = last;
  10.                 this.address = address;
  11.         }
  12.         @Override
  13.         public String toString() {
  14.                 return "Person [first=" + first + ", last=" + last + ", address="
  15.                                 + address + "]";
  16.         }
  17.         
  18.         public static class NullPerson extends Person implements Null {
  19.                 private NullPerson(){ super("None", "None", "None"); }
  20.                 public String toString() { return "NullPerson"; }
  21.         }
  22.         public static final Person NULL = new NullPerson();
  23. }

复制代码


内部类NullPerson的构造器器用private声明了,为什么还能再内部类的外部调用?
作者: 谭荣强    时间: 2014-3-26 23:02
你要表达什么,构造器是构造函数,外部怎么能调用,哪行代码调用了?你是不是指这一句
public static final Person NULL = new NullPerson();
这是new 对象啊
作者: 林林鸦    时间: 2014-3-26 23:07
本帖最后由 林林鸦 于 2014-3-26 23:11 编辑
谭荣强 发表于 2014-3-26 23:02
你要表达什么,构造器是构造函数,外部怎么能调用,哪行代码调用了?你是不是指这一句
public static final ...

对,这句话不是调用了内部类的构造函数吗?可是构造函数用private关键词声明了,应该不能在内部类的范围之外new 一个内部类的对象吧,
我的想法是应该在内部类中写一个public static NullPerson makeNullPerson(){ return new NullPerson();},然后调用静态方法
就像单例设计模式中那样。

作者: 谭荣强    时间: 2014-3-27 13:01
林林鸦 发表于 2014-3-26 23:07
对,这句话不是调用了内部类的构造函数吗?可是构造函数用private关键词声明了,应该不能在内部类的范围之 ...

没见过这情况,不过到真可以。解释不了,估计和单例原理差不多,把内部类当做了一个私有成员。
作者: QQNumber    时间: 2014-3-27 13:44
本帖最后由 QQNumber 于 2014-3-27 13:46 编辑

一个方法可以访问所属类的所有对象的私有数据




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