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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 林林鸦 于 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声明了,为什么还能再内部类的外部调用?

评分

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

查看全部评分

4 个回复

倒序浏览
你要表达什么,构造器是构造函数,外部怎么能调用,哪行代码调用了?你是不是指这一句
public static final Person NULL = new NullPerson();
这是new 对象啊
回复 使用道具 举报
本帖最后由 林林鸦 于 2014-3-26 23:11 编辑
谭荣强 发表于 2014-3-26 23:02
你要表达什么,构造器是构造函数,外部怎么能调用,哪行代码调用了?你是不是指这一句
public static final ...

对,这句话不是调用了内部类的构造函数吗?可是构造函数用private关键词声明了,应该不能在内部类的范围之外new 一个内部类的对象吧,
我的想法是应该在内部类中写一个public static NullPerson makeNullPerson(){ return new NullPerson();},然后调用静态方法
就像单例设计模式中那样。
回复 使用道具 举报
林林鸦 发表于 2014-3-26 23:07
对,这句话不是调用了内部类的构造函数吗?可是构造函数用private关键词声明了,应该不能在内部类的范围之 ...

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

一个方法可以访问所属类的所有对象的私有数据
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马