Why create public methods?

Hi all,
When I declare a class as default ( i mean that no access specifier is declared), why do i need to declare its member functions as public for them to be accessible by other classes in the same package?
Thanks in advance,
Seshu.

You don't need to make methods public for them to be accessible by other classes in the same package. Why do you think you have to?
Also, the access specifier of methods doesn't have anything to do with the access specifier of the class.
Jesper

Similar Messages

  • Why only public methods in interfaces?

    Howdy all,
    I'm wondering if someone can shed some light on why Java doesn't allow interfaces to declare non-public methods.
    Ideally, I'd like to do something like this:
    public Interface Foo {
      protected void setFooProperty(int);
      public int getFooProperty();
    public Interface Goo {
      protected void makeGooey(boolean);
      public boolean isGooey();
    public class A implements Foo
    public class B implements Goo
    public class C implements Foo, GooI don't see any technical reason why interfaces must be restricted to declaring public methods only, but it seems too arbitrary to have been done without reason. Any ideas?

    I don't think that is a good idea to put non-public methods in public interfaces. But I beleive that's a good idea to have protected (or friendly) interfaces to be used only in package scope. It could help a lot some projets defining a second level of data exposure of an object so that developers of that package could have more information that others users from outside the package have that are interesting to develop better algorithm that work with that data. In this way, we can defien thre levels of that access: The lower is the package user, that can see the minimum that's possible, above him we have the package developer that don't work directly with the data, but needs some deep access to it to do cool stuff, and finally we have the guy that is doing the object that deals directly with the data (and encapsulate it).
    In this way we can decouple a little the data from the algorithms that work on it, put between them an interface that standarize the access to the data in an intermediate level.
    Hope you are able to understand what I wrote (my english isn't so good!).
    RGB

  • When/why do we create custom method in Entity DefImpl ?

    Hi All,
    I am reading "ADF Dev Guide 4 GL" on "section 9.6.2 : Implementing an Efficient Existence Check " , referring to the SRDemo sample.
    I do not understand why the "exists" method is created in ProductDefImpl ?
    Why don't we create it in ProductImpl or SRServiceImpl ?
    Is it a best practice to always create the method for checking existence in the <Entity>DefImpl ?
    Thank you very much,
    xtanto

    Repost.

  • Why are interface methods public?

    I want to define a package interface that will be implemented only by package classes which will be used only by other package classes. Why do the methods have to be public?

    In java you don't have multiple inheritance. To
    circumvent that it is said to extend the most
    important class and implement the others with
    interfaces. No. Java does not support multiple inheritance. Interfaces do not exist to supply that functionality. Interfaces can be used to simulate some of the patterns that multiple inheritence represents.
    (You can have skeleton implementations to
    help you implement those interfaces in other
    classes).
    But the interface methods are public. So all the
    classes you 'extend' via this trick have all methods
    public.
    This is a bad thing. All of you who have used RMI (or
    J2EE) know that you can serialize objects between two
    networked machines. ValueObjects pattern from J2EE
    toolbox is a good example of this. Now, if you happen
    to have several quite similar objects, you obviously
    would like them to inherit those common traits from
    some base class. If you would also like them to have
    some other common functionality (for example server
    side 'maintenance' methods, state monitoring, checking
    and clearing, you would have to make those methods
    public 'cos you only have interface implementation
    left - after spending that single credit to actual
    inheritance.No. Convienence ("common functionality") should not be used in most cases when designing hierarchies. Inheritence should only be used to represent 'is a' relationships.

  • Creating  a Method

    OK, now I need to create a method: public boolean isLeapYear(int year)
    This is the script
    public class MyDate{
         //...code that defines sate and behaviour of all date objects
    public static void main(String[] args) {
    System.out.println("My Date!"); //Display the string.
    This is the error that I get now:
    --------------------Configuration: j2sdk1.4.0_03 <Default>--------------------
    C:\j2sdk1.4.0_03\MyDate.java:6: 'class' or 'interface' expected
    public static void main(String[] args) {
    ^
    1 error
    Process completed.
    Any suggestions?

    Like this you mean??yup.
    that is far better.
    public class MyDate{
      //...code that defines state and behaviour of all date objects
      public static void main(String[] args) {
        System.out.println("My Date!"); //Display the lay the string.
    }(PS! i added one curly barcket to the end of your code... and also formating tags so you could see it better)
    and here is link to tutorial where they discuss simple hello world program:
    http://java.sun.com/docs/books/tutorial/getStarted/application/index.html
    if you follow that trail, then you find explanation where and why should methods and fields be, and other useful stuff.

  • Help with Creating a method that takes a string of arrays?

    i just begin my intro to programming and im a little stuck we had to write a program yesterday and i managed fine then today we had to work with arrays and i dont know much about arrays so im hoping someone here can point me in the right direction. This is what he wants *"Create a method called "printReceipts" that takes a String array of names (first names only) and prints out a message to customers using their name and telling them what customer number they are. The method should work with an array of any size."*
    Im not asking you to do it for me just i gues point out what methods i need to change thanks
    package edu.nmhu.cs245;
    public class Assignment1 {
         private String messagePrefix1 = "Hello ";
         private String messagePrefix2 = ", \n";
         public String[] getName() {
              String[] names = new String[] {"Lonny", "Gil", "Hosein"};
              return names;
         public String getCompleteMessage(String name, String message) {
              String completeMessage = messagePrefix1 + name + messagePrefix2 + message ;
              return completeMessage;
          * @param args
         public static void main(String[] args) {
              Assignment1 a = new Assignment1();
              String[] names = a.getName();
              for (int i = 0; i < names.length; i++) {
                   String printReciepts = a.getCompleteMessage(names,"You are customer number#" +(i+1));
                   System.out.println(printReciepts);
                   System.out.println();

    Focus! You should know what every single line of code is supposed to do! And they should all add up to a larger goal.
    Don't just put in stuff that seems like it's part of a relevant example.
         public String[] getName() {
              String[] names = new String[] {"Lonny", "Gil", "Hosein","Sam"};
              return names;
         }Are you supposed to do it that way? Or did it come with the assignment? It's (probably) fine for a homework assignment, but it's hardcoded data, which in practice one normally doesn't do.
              String completeMessage = messagePrefix1 + names + messagePrefix2 + messageSuffix ;Why do this? You're supposed to produce a receipt per use, not for all users at one.
              for (int i = 0; i < names.length; i++) OK, good. You could have used a foreach loop but this is fine.
                   String printReciepts = a.getCompleteMessage(names,"You are customer number#" +(i+1));What is "getCompleteMessage"?  You didn't define it.  Do you think that it is created implicitly because of the local String variable you created called "completeMessage"?  It doesn't.           String2 a = new String2();Don't call your class "String2".  It doesn't mean anything.  Name it after the assignment or something.           a.printReceipts(names);"names" isn't defined.  There's a local variable called "names" in the getNames method, but it doesn't exist when you call this and it's unavailable anyway.  You probably meant to do           a.printReceipts(a.getName());                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

  • Ramifications of extending subclass by creating abstract method in base

    What r the ramification of extending subclass functionality by creating abstract method in base class?

    javax.swing.JComponent is an example of an abstract
    class with no abstract methods. That is why the
    following works:
    JComponent component = new JComponent(){};
    Not to forget you cannot instantiate abstarct classes
    public abstract class Test
    public String getName()
    return "Mike";
    public static void main(String[] args)
    Test tt = new Test();
    System.out.println(tt.getName());
    }and you would get the error
    The type Test cannot be instantiated.
    You remove the abstract keyword and it would compile
    good.No I am not misinterpreting I know what he is saying but I am closing the door of misinterpretation which I felt was possible. ;)
    cheers

  • Error while calling a super class public method in the subclass constructor

    Hi ,
    I have code like this:
    CLASS gacl_applog DEFINITION ABSTRACT.
      PUBLIC SECTION.
        METHODS:
                create_new_a
                   IMPORTING  pf_obj       TYPE balobj_d
                              pf_subobj    TYPE balsubobj
                              pf_extnumber TYPE string
                   EXPORTING  pfx_log_hndl TYPE balloghndl
                   EXCEPTIONS error
    ENDCLASS.
    CLASS gacl_applog IMPLEMENTATION.
      METHOD create_new_a.
        DATA: ls_log TYPE bal_s_log.
      Header aufsetzen
        MOVE pf_extnumber TO ls_log-extnumber.
        ls_log-object     = pf_obj.
        ls_log-subobject  = pf_subobj.
        ls_log-aluser     = sy-uname.
        ls_log-alprog     = sy-repid.
        ls_log-aldate     = sy-datum.
        ls_log-altime     = sy-uzeit.
        ls_log-aldate_del = ls_log-aldate + 1.
        CALL FUNCTION 'BAL_LOG_CREATE'
             EXPORTING
                  i_s_log      = ls_log
             IMPORTING
                  e_log_handle = pfx_log_hndl
             EXCEPTIONS
                  OTHERS       = 1.
        IF ( sy-subrc NE 0 ).
          MESSAGE ID      sy-msgid TYPE sy-msgty NUMBER sy-msgno
                  WITH    sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
                  RAISING error.
        ENDIF.
      ENDMETHOD.
    CLASS gcl_applog_temp DEFINITION INHERITING FROM gacl_applog.
      PUBLIC SECTION.
        DATA: log_hndl   TYPE balloghndl READ-ONLY
            , t_log_hndl TYPE bal_t_logh READ-ONLY
        METHODS: constructor
                   IMPORTING  pf_obj       TYPE balobj_d
                              pf_subobj    TYPE balsubobj
                              pf_extnumber TYPE string
                   EXCEPTIONS error
               , msg_add      REDEFINITION
               , display      REDEFINITION
    ENDCLASS.
    CLASS gcl_applog_temp IMPLEMENTATION.
      METHOD constructor.
        CALL METHOD create_new_a
               EXPORTING  pf_obj       = pf_obj
                          pf_subobj    = pf_subobj
                          pf_extnumber = pf_extnumber
               IMPORTING  pfx_log_hndl = log_hndl.
        IF ( sy-subrc NE 0 ).
          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
                  RAISING error.
        ENDIF.
      ENDMETHOD.
    A public method of Super class has been called from the constructor of the sub class. we are getting the syntax error :
    ' In the constructor method, you can only access instance attributes, instance methods, or "ME" after calling the constructor of the superclass…'
    Can you please suggest how to change the code with out affecting the functioanlity.
    Thank you ,
    Lakshmi.

    Hi,
    Call that method by instance of Subclass.   OR
    SUPER-->method.
    Read very useful document
    Constructors
    Constructors are special methods that cannot be called using CALL METHOD. Instead, they are called automatically by the system to set the starting state of a new object or class. There are two types of constructors - instance constructors and static constructors. Constructors are methods with a predefined name. To use them, you must declare them explicitly in the class.
    The instance constructor of a class is the predefined instance method CONSTRUCTOR. You declare it in the public section as follows:
    METHODS CONSTRUCTOR
            IMPORTING.. [VALUE(]<ii>[)] TYPE type [OPTIONAL]..
            EXCEPTIONS.. <ei>.
    and implement it in the implementation section like any other method. The system calls the instance constructor once for each instance of the class, directly after the object has been created in the CREATE OBJECT statement. You can pass the input parameters of the instance constructor and handle its exceptions using the EXPORTING and EXCEPTIONS additions in the CREATE OBJECT statement.
    The static constructor of a class is the predefined static method CLASS_CONSTRUCTOR. You declare it in the public section as follows:
    CLASS-METHODS CLASS_CONSTRUCTOR.
    and implement it in the implementation section like any other method. The static constructor has no parameters. The system calls the static constructor once for each class, before the class is accessed for the first time. The static constructor cannot therefore access the components of its own class.
    Pls. reward if useful....

  • Error while accessing a public method of applet from javascript.

    Hi,
    I am getting "Object doesn't support this property or method" error
    when accessing a public method of applet from javascript in IE 6 using
    document.applets[0].myMethod();
    The same is working in IE 7.
    Thanks in advance.
    Regards,
    Phanikanth

    I don't know why it happens, but this works for me in both versions:
    <applet ..... name="MyApplet">
    </applet>and in javascript use
    document.MyApplet.myMethod()

  • How can I create a method with throws  instruction

    Hello Everybody!
    How can I create this method inside WebDynpro.
    I enter "throws CloneNotSupportedException" manually an it removes always.
    What is wrong ?
    public java.lang.Object clone( ) throws CloneNotSupportedException{
        //@@begin clone()
         __Tdag__Is_Charactconfig that= (__Tdag__Is_Charactconfig)super.clone();
           return that;
        //@@end
    Regards
    sas

    I only checked in my 7.1 IDE and there this section exists.
    If it does not exist in your IDE, just create the method manually in the //@@begin others ... //@@end user-coding-area at the end of the controller class. This solves the issue for methods that are called from inside the controller. For public methods to be called from other controllers, this will not help.
    Armin

  • Error when calling a Webservice's public method in Forms10g

    Hi,
    I'm getting the following error when calling a webservice's public method, i'm using Forms10g 10.1.2.3
    java.rmi.RemoteException; nested exception is: HTTP transport error javax.xml.soap.SOAPException
    java.security.PrivilegedActionException javax.xml.soap.SOAPException
    Message send failed javax.net.ssl.SSLException SSL handshake failed X509CertChI have added the Jar containing the client proxy in both Classpaths(system variable and default.env), the jar has been made with jdk 1.4
    I also have tested the client proxy from jDeveloper and it's working there, but in Forms i'm getting this error.
    I guess my problem might be that i'm calling a webservice that is secured since the url starts with https
    what should i do to fix this ??
    Regards
    Carlos

    I understand, so i have a doubt, why the webservice works on jDeveloper ??Not just JDeveloper even soapUI and Neatbeans have a way of working without a client certificate installed.
    I do not know how they achieve it. I know that they work without a client DC.
    Cheers,
    PS: See this http://stackoverflow.com/questions/8887434/webservices-ssl-https, it offers a clue.
    The java programs run unhindered when one-way authentication is being used. These products ship with a digital certificate that is in the path of most popular CAs.
    Corollary, if the Web Server is configured for mutual authentication then you need to install and configure the client certificate in the tools.
    Edited by: Prabodh on Dec 5, 2012 8:36 PM

  • Getting error while creating abstract method

    hi folks,
    i facing issue for ABSTRACT Class.
    I am trying to create abstarct method, (refered example from saptechnical site),
    I created one attribute i-num, created one method AREA, in  implementation area , i made it as Abstract, then i did syntax check, then it is giving below error.
    *Class ZTEST_CLASS01_AB,Method AREA
    The abstract method "AREA" can only be implemented after its
    redefinition (METHODS AREA REDEFINITION).*
    i tried all the ways..
    created subclass for this, i writted some code in AREA of Sub-class, there it is giving dump, because first one is not activated properly..
    could you please somebody help me on this.
    Sri

    Hello Arshad,
    Create a class(ZABSTRACT) and make its type as Abstract( Which means atleast one of its methods is abstract)
    We can have abstract classes with all it's methods as non-abstract or concrete. A small example is given below:
    CLASS gcl_abstract DEFINITION ABSTRACT.
      PUBLIC SECTION.
        METHODS concrete. "Concrete
    ENDCLASS.                    "gcl_abstract DEFINITION
    *       CLASS gcl_abstract IMPLEMENTATION
    CLASS gcl_abstract IMPLEMENTATION.
      METHOD concrete.
        WRITE: / `I'm a concrete method`.
      ENDMETHOD.                    "concrete
    ENDCLASS.                    "gcl_abstract IMPLEMENTATION
    *       CLASS gcl_abstract_sub DEFINITION
    CLASS gcl_abstract_sub DEFINITION INHERITING FROM gcl_abstract.
      PUBLIC SECTION.
        METHODS concrete REDEFINITION.
    ENDCLASS.                    "gcl_abstract_sub DEFINITION
    *       CLASS gcl_abstract_sub IMPLEMENTATION
    CLASS gcl_abstract_sub IMPLEMENTATION.
      METHOD concrete.
        super->concrete( ).
        WRITE: / 'Abstract class might not have abstract methods at all!'.
      ENDMETHOD.                    "concrete
    ENDCLASS.                    "gcl_abstract_sub IMPLEMENTATION
    START-OF-SELECTION.
      DATA: go_abstract TYPE REF TO gcl_abstract_sub.
      CREATE OBJECT go_abstract.
      go_abstract->concrete( ).
    Although i will agree there is no point in making a class as abstract & having no abstract method
    @Sri: Looks like you're trying to implement the abstract method "AREA" in the abstract class hence the error. For abstract method you cannot define their implementation in the corres. abstract class.
    BR,
    Suhas
    Edited by: Suhas Saha on Mar 30, 2011 12:04 PM

  • How to find out the public methods and public fields available

    Hi,
    I have a dll for which to use it, i need to know the methods and the fields available for public use. Is there anyway to find out that information using any tool. I dont have any literature about the dll. Only have that dll.
    Thanks in advance,
    -Madhuri.

    You can find an article about creating the methods on the Microsoft Developement Network call "How to Create 32-bit Import Libraries Without .OBJs or Source"
    However that is only part of the problem.
    Consider if you find that the dll has a function like this:
    InitApplication(char*, int, char, long);
    What do you put in for each of those parameters? The only way I know to do that it to use a debugger and step through the assembler code figuring it out as you go. Alternatively you buy or find a disassembler - C code would probably be easier to figure out.
    I would also seriously suggest finding some different lists/news groups than this one. The topic has nothing to do with java. So you are likely to get better help somewhere that is more specific - like one of the MS lists.

  • Problem with local class, static private attribute and public method

    Hello SDN,
    Consider the following situation:
    1) I have defined a LOCAL class airplane.
    2) This class has a private static attribute "type table of ref to" airplane (array of airplanes)
    3) A public method should return the private static table attribute
    Problems:
    a) The table cannot be given as an EXPORTING parameter in the method because TYPE TABLE OF... is not supported and I get syntax errors. I also cannot define a dictionary table type because it is a local class.
    b) The table cannot be given as a TABLES parameter in the method because TABLES is not supported in the OO context.
    c) The table cannot be given as an EXPORTING parameter in the method defined as LIKE myStaticAttribute because my method is PUBLIC and my attribute is PRIVATE. ABAP syntax requires that all PUBLIC statements are defined before PRIVATE ones, therefore it cannot find the attribute to reference to with LIKE.
    I see only 2 solutions:
    a) Never ever use local classes and always use global classes so that I might define a dictionary table type of my class which I can then use in my class.
    b) Make the attribute public, but this goes against OO principles, and isn't really an option.
    Am I missing anything here, or is this simply overlooked so far?

    Hello Niels
    Since your class is local and, thus, only know to the "surrounding" application is does not really make sense to make it public to any other application.
    However, if you require to store instances of your local classes in internal tables simply use the most generic reference type possible, i.e. <b>OBJECT</b>.
    The following sample report shows how to do that. Furthermore, I believe it also shows that there are <u><b>no </b></u>serious inconsistency in the ABAP language.
    *& Report  ZUS_SDN_LOCAL_CLASS
    REPORT  zus_sdn_local_class.
    " NOTE: SWF_UTL_OBJECT_TAB is a table type having reference type OBJECT
    *       CLASS lcl_airplane DEFINITION
    CLASS lcl_airplane DEFINITION.
      PUBLIC SECTION.
        DATA:    md_counter(3)             TYPE n.
        METHODS: constructor,
                 get_instances
                   RETURNING
                     value(rt_instances)   TYPE swf_utl_object_tab.
      PRIVATE SECTION.
        CLASS-DATA: mt_instances    TYPE swf_utl_object_tab.
    ENDCLASS.                    "lcl_airplane DEFINITION
    *       CLASS lcl_airplane IMPLEMENTATION
    CLASS lcl_airplane IMPLEMENTATION.
      METHOD constructor.
        APPEND me TO mt_instances.
        DESCRIBE TABLE mt_instances.
        md_counter = syst-tfill.
      ENDMETHOD.                    "constructor
      METHOD get_instances.
        rt_instances = mt_instances.
      ENDMETHOD.                    "get_instance
    ENDCLASS.                    "lcl_airplane IMPLEMENTATION
    DATA:
      gt_instances      TYPE swf_utl_object_tab,
      go_object         TYPE REF TO object,
      go_airplane       TYPE REF TO lcl_airplane.
    START-OF-SELECTION.
      " Create a few airplane instance
      DO 5 TIMES.
        CREATE OBJECT go_airplane.
      ENDDO.
      gt_instances = go_airplane->get_instances( ).
      CLEAR: go_airplane.
      LOOP AT gt_instances INTO go_object.
        go_airplane ?= go_object.
        WRITE: / 'Airplane =', go_airplane->md_counter.
      ENDLOOP.
    END-OF-SELECTION.
    Regards
      Uwe<u></u>

  • How to create a method with an interface parameter?

    Hi there.
    I would create a method with an interface parameter. I mean this:
    public interface MyInt {
        public void method(int i);
    public class SubClass implements MyInt {
        public void method(int i) {
            System.out.println("The number is: " + i);
    public class MainClass {
        public MainClass(MyInt inter) {
            inter.method(10);
        public static void main(String[] args) {
    (*)     new MainClass(new SubClass());
    }I tried to compile this but do not work (incompatible types on (*)) . Is it possible to do something like that or not?

    I compiled and runned this code on my machine and it works fine.
    How did you did to compile and run this code ?
    Did you put each code on its own file or all codes in the same file ?
    I did like this:
    I put each code in its own file and put all in the same dir, after I did:
    javac -classpath . MainClass.java
    After that, I did:
    java -classpath . MainClass
    I hope this help you
    Lucas

Maybe you are looking for

  • MAC AIR Crashes on wake from sleep

    Dear All, I have a user's Mac Air exhibiting the ubiquitous 'wake from sleep' issue that seems to have reared its head at every OS since 10.2, increasingly occurring with or without various apps running at time of sleep. Upon tapping space bar after

  • Error while deploying model

    Dear friends, I am facing following error while deploying model. can anyone help me how to resolve this error? Error in compiling Flex application: java.lang.InternalError: An error occurred because there is no graphics environment available.  Please

  • Ipod touch NOT SYNCING ANY MUSIC, even when plugged in and "syncing"

    I press sync, and it skips syncing music. I try backup restores, and it worked the first time, yet now I restore to multiple previous versions and it deletes certain songs that weren't on before, and it has lagged once it reaches a certain song, and

  • Creating psd animation

    I imported  "Image Sequence"  inPS then created the sequence and adjusted the layers and timeline. Two questions: 1) How do I revert all the frames (the are in the wrong order) 2) from the file in Photoshop format but I can't figure out how to save a

  • Multiple Applications and RPC

    I'm having problems with loading multiple sub-applications and making remote calls to BlazeDS. I get an error saying: TypeError: Error #1034: Type Coercion failed: cannot convert Object@ce33921 to mx.messaging.messages.ErrorMessage. I have read a few