Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-1249345

interface methods public by default

    Details

    • Type: Bug
    • Status: Closed
    • Priority: P3
    • Resolution: Not an Issue
    • Affects Version/s: 1.0, 1.0.2, 1.1
    • Fix Version/s: None
    • Component/s: tools
    • Subcomponent:
    • CPU:
      sparc
    • OS:
      solaris_2.5

      Description

      From my reading of the spec, interface methods are package-private by default
      unless declared public. From the following compiler error it seems they are
      public by default.

      DREL 5/9/96

      springbok /tmp [26] % /usr/local/java/nightly/jdk1.1/bin/javac a.java
      a.java:8: Methods can't be overridden to be more private. Method void method0() is public in interface foo.A.
          void method0() {}
               ^
      1 error
      springbok /tmp [27] % cat a.java
      package foo;
       
      interface A {
          void method0();
      }
       
      class a implements A {
          void method0() {}
      }

      [meiphen 5/14/96]
      A customer from Unify has encountered this same problem and is reporting
      the bug with JDK1.0 beta release, although the bug still exists in JDK1.0.2:

      % javap -version
      javap version "JDK1.0beta"

      The public keyword is being applied to interface definitions even when
      it is not included in soruce.

      -------------------- ifacetest.java source
      /* not public */
      interface ifacetest
      {
      void testit(); // not public
      }

      -------------------- dissassemble the compiled class
      % javap ifacetest

      Compiled from ifacetest.java
      interface ifacetest extends java.lang.Object {
      public abstract void testit();
      }

      -------------------- imptest.java source to implement ifactest
      class imptest implements ifacetest
      {
      void testit()// not public
      {
      }
      }

      -------------------- compile this and see what happens.

      javac imptest.java
      imptest.java:4: Methods can't be overridden to be more private. \\
      Method void testit() is public in interface ifacetest.
      void testit()// not public
      ^
      1 error

      Added public modifier to imptest.testit() and it will compile.

        Attachments

          Activity

            People

            • Assignee:
              fyellinsunw Frank Yellin (Inactive)
              Reporter:
              dlong Dean Long
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:
                Imported:
                Indexed: