java中的内部类构造函数

时间:2014-08-12 13:48:08

标签: java inner-classes

嗨,我有一个这样的程序。

  1. 接口

    package Sarvari.pack1;
    public interface Inter
    {
        void f();
    }
    
  2. 外部类和内部类:

    package Sarvari.pack2;
    import Sarvari.pack1.*;
    public class Outer
    {
        protected class Inner implements Inter
        {
            Inner() {//only public is working not protected or default;
                System.out.println("constructor of inner class");
            }
    
            public void f(){
                System.out.println("f method in inner class");
            }
        }
    }
    
  3. 扩展外部类的类:

    package sarvari;
    
    import sarvari.pack2.*;
    import sarvari.pack1.*;
    public class Coffee extends sarvari.pack2.Outer{
        public Inter met(){
             return new Inner();
        }
        public static void main(String[] args){
            new Coffee().met().f();
        }
    }       
    
  4. 我的问题是

    1. 为什么我必须将Inner类的构造函数声明为public?为什么我不能默认访问它?

    2. 如果内部类的受保护访问权限来自构造函数,那么即使我将访问权限保留为构造函数的保护程序,它也无法正常工作......只有公共工作。有人可以解释这种行为吗?

1 个答案:

答案 0 :(得分:0)

您的问题是,Coffee位于另一个包中,而不是Inner。另一个包Coffee只能访问public的{​​{1}}个成员,因为它不是Inner的儿童类。

另一个问题是名为 java 的包。禁止使用它。为自定义类使用其他名称。

您可以使用此Inner类作为解决方法,如果您需要从Coffee访问Inner - 构造函数,但又不想将其公开:

Coffee