A superclass reference can call subclass method directly?

A Swing Container reference seems to be able to call the methods of subclass directly. For example, you can find following expression in a JApple or JFrame implementation:
Container c = getContentPane()
But if you look at the standard API site, you find that Container doesn't have getContentPane(), nor its superclass. Its subclass, JApplet or JFrame has the method! That means that a reference of superclass can use the method in subclass directly. It's hard to understand since superclass can't aware what in its subclasses. Inheritance got to be one direction-->from superclass to subclass.
Thanks for advise.

Hey yylx,
I dont see in you example where a superclass is calling the a function of its subclass. An object can call any of its own function, any protected or public functions of its superclass, and can also invoke any public functions of objects it has references to.
So in JFrame, when it calls getContentpane() it is invoking one of its own functions which is fine. The function returns a reference to a Container, which JFrame can now invoke the public functions of... The public interface of an object, in this case a container, is available to any other object. So JFrame can call any functions on that particular Container.
Does that clarify? If not, explain further....
Josh

Similar Messages

  • Superclass variable not calling subclass method

    hi,
    i've got a bit of a problem with my method invocation. i'll try to explain in abstract terms:
    class SuperClass {
    void method(int x){
    //some action
    class SubClass extends SuperClass {
    static final int VARIABLE = 1;
    void method(int x){
    x = modify(x);
    super.method(x)
    int modify(int x){
    return x += VARIABLE;
    my problem is that i've got about 20 or so subclasses that i refer to through a superclass reference. as i understand it, i should be about to call:
    int result = superClassRef.method(5);
    and this will call the subclass method, perform the modification and return the result. my problem is twofold.
    1) the superclass reference dosen't call the subclass's method
    2) what happens when it gets to the subclass's modify method and trys to access the subclass's VARIABLE through a superclass reference? as i understand it shouldn't be accessible from the superclass reference.
    hmmm...any help would be most appreciated.
    cameron

    that was what i ment -
    SuperClass superClassRef = new SubClass();
    superClassRef.method(5); //dosen't return anything
    i think this may be turning into a more wide ranging application problem. i tried to bypass the natural superclass method invocation with the following code:
    Method m = superClassRef.getClass().getMethod("method");
    m.invoke(superClassRef, new Object[]{new Integer(x)});
    but on trying this it throws an InvocationTargetException.
    for clarity - the two methods in the subclass are:
    void method(int x) (overrides the superclass's method(int x))
    and
    int modify(int x)
    sorry for the bad naming.
    i've figured out the variable thing - i'd only be if there were variable shaddowing in the subclass that problems could arrise.

  • How  can call a method incide  the method in jsp

    I wrote some statement inside the scriptlet(<% %>)
    then i want call another method ,that one inside the same script let..please replay...

    please help How can write a function inside the JSP

  • How we can call java methods in ODI?

    Hi
    i have java jars.i would like to call java methods from ODI
    how it is possible in ODI?
    plz help me regards the same
    thanks

    Hi
    i tried according to given contents in this link
    but in my systen i am getting error
    could y plz help me regards solving this error
    error is :
    org.apache.bsf.BSFException: exception from Jython:
    Traceback (innermost last):
    File "<string>", line 1, in ?
    java.lang.UnsupportedClassVersionError: FileWrite (Unsupported major.minor version 50.0)
         at java.lang.ClassLoader.defineClass0(Native Method)
         at java.lang.ClassLoader.defineClass(Unknown Source)
         at java.security.SecureClassLoader.defineClass(Unknown Source)
         at java.net.URLClassLoader.defineClass(Unknown Source)
         at java.net.URLClassLoader.access$100(Unknown Source)
         at java.net.URLClassLoader$1.run(Unknown Source)
         at java.security.AccessController.doPrivileged(Native Method)
         at java.net.URLClassLoader.findClass(Unknown Source)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at java.lang.ClassLoader.loadClassInternal(Unknown Source)
         at java.lang.Class.forName0(Native Method)
         at java.lang.Class.forName(Unknown Source)
         at org.python.core.SyspathJavaLoader.loadClass(SyspathJavaLoader.java)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at org.python.core.Py.findClassEx(Py.java)
         at org.python.core.SysPackageManager.findClass(SysPackageManager.java)
         at org.python.core.PackageManager.findClass(PackageManager.java)
         at org.python.core.SysPackageManager.findClass(SysPackageManager.java)
         at org.python.core.PyJavaPackage.__findattr__(PyJavaPackage.java)
         at org.python.core.PackageManager.lookupName(PackageManager.java)
         at org.python.core.imp.load(imp.java)
         at org.python.core.imp.import_next(imp.java)
         at org.python.core.imp.import_name(imp.java)
         at org.python.core.imp.importName(imp.java)
         at org.python.core.ImportFunction.load(__builtin__.java)
         at org.python.core.ImportFunction.__call__(__builtin__.java)
         at org.python.core.PyObject.__call__(PyObject.java)
         at org.python.core.__builtin__.__import__(__builtin__.java)
         at org.python.core.imp.importOne(imp.java)
         at org.python.pycode._pyx0.f$0(<string>:1)
         at org.python.pycode._pyx0.call_function(<string>)
         at org.python.core.PyTableCode.call(PyTableCode.java)
         at org.python.core.PyCode.call(PyCode.java)
         at org.python.core.Py.runCode(Py.java)
         at org.python.core.Py.exec(Py.java)
         at org.python.util.PythonInterpreter.exec(PythonInterpreter.java)
         at org.apache.bsf.engines.jython.JythonEngine.exec(JythonEngine.java:144)
         at com.sunopsis.dwg.codeinterpretor.k.a(k.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.scripting(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execScriptingOrders(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execScriptingOrders(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTaskTrt(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSqlS.treatTaskTrt(SnpSessTaskSqlS.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTask(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessStep.treatSessStep(SnpSessStep.java)
         at com.sunopsis.dwg.dbobj.SnpSession.treatSession(SnpSession.java)
         at com.sunopsis.dwg.cmd.DwgCommandSession.treatCommand(DwgCommandSession.java)
         at com.sunopsis.dwg.cmd.DwgCommandBase.execute(DwgCommandBase.java)
         at com.sunopsis.dwg.cmd.e.i(e.java)
         at com.sunopsis.dwg.cmd.g.y(g.java)
         at com.sunopsis.dwg.cmd.e.run(e.java)
         at java.lang.Thread.run(Unknown Source)
    java.lang.UnsupportedClassVersionError: java.lang.UnsupportedClassVersionError: FileWrite (Unsupported major.minor version 50.0)
         at org.apache.bsf.engines.jython.JythonEngine.exec(JythonEngine.java:146)
         at com.sunopsis.dwg.codeinterpretor.k.a(k.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.scripting(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execScriptingOrders(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execScriptingOrders(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTaskTrt(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSqlS.treatTaskTrt(SnpSessTaskSqlS.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTask(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessStep.treatSessStep(SnpSessStep.java)
         at com.sunopsis.dwg.dbobj.SnpSession.treatSession(SnpSession.java)
         at com.sunopsis.dwg.cmd.DwgCommandSession.treatCommand(DwgCommandSession.java)
         at com.sunopsis.dwg.cmd.DwgCommandBase.execute(DwgCommandBase.java)
         at com.sunopsis.dwg.cmd.e.i(e.java)
         at com.sunopsis.dwg.cmd.g.y(g.java)
         at com.sunopsis.dwg.cmd.e.run(e.java)
         at java.lang.Thread.run(Unknown Source)

  • Calling subclass/method in a parentclass

    class A extends Frame implements ActionListener
    Button ok;
    public void actionPerformed (ActionEvent ae)
    try
    if (ae.getActionCommand().equalsIgnoreCase("OK"))
    /* HOW DO I CALL CLASS B OR METHOD IN CLASS B ONCLICK OK BUTTON*/
    catch(Exception e)
    System.out.println(e);
    class B extends A
    B()
    //create a panel and will show some buttons, textfield etc.
    public static void main(String args[])
    new A();
    }

    Is it so hard to click on the Formatting Help link, that I provided earlier AND that is at the top of the screen where you post the question?
    Is it so hard to ask your question OUTSIDE of the unformatted code, so as to make it easier to find?
    That aside:
    HOW DO I CALL CLASS B OR METHOD IN CLASS B ONCLICK OK BUTTON
    You can't. What you CAN do is make your super class abstract, with an abstract method, make your subclass a concrete implementation:
    public abstract class A extends Frame implements ActionListener
      protected Button ok;
      public void actionPerformed (ActionEvent ae)
        try
          if (ae.getActionCommand().equalsIgnoreCase("OK"))
            doOKCommand();
        catch(Exception e) /*Catch specific exeptions, much better than the general excpetion */
          e.prinbtStackTrace(); /* get much better info this way... */
      protected abstract void doOKCommand();
      public static void main(String[] args)
        A anA = new B(); //Note, use new B() to get B functionality!!!
    } //end of class A
    public class B extends A
      B()
        //create a panel and will show some buttons, textfield etc.
      protected doOKCommand()
        //Do real Stuff
    }

  • How Can I Call a method in iView  ,which is in another iView

    I Have 2 iViews i want to call a method in Iview which is i another iView
    Thanks and Regards
    Prasad.Y

    Hi Prasad,
    first, welcom at SDN.
    Next, let us clarify some wording:
    A <i>PAR</i> is a <i>Portal ARchive</i>. It is a zip in a certain format. It contains a <i>portal application</i>.
    A <i>portal application</i> consists of <i>components</i> and/or <i>services</i>.
    An <i>iView</i> is somehow an "instance" of a <i>component</i>. It is created within the portal. There are <i>no iViews in a PAR</i> (like: "There are no objects in a JAR (but classes).").
    With this in mind, you know that the question does not work, for iViews don't have "methods".
    If you ask how you can call a method of a class belonging to a different component (but within the same portal app), it is no problem at all, each class has access to each other class within the same portal app (in fact, one has to differentiate between public and private part, but we don't want to go so far). To call use a class belonging to (the public part of) a different app, you will have to set the SharingReference within portalapp.xml.
    If that's what you're looking for - great.
    If not, ask again, but far more detailed.
    Hope it helps
    Detlev
    PS: Please consider to reward points for helpful answers. Thanks in advance.

  • Errors in a Java class when calling other methods

    I am giving the code i have given the full class name . and now it is giving the following error :
    Cannot reference a non-static method connectDB() in a static context.
    I am also giving the code. Please do help me on this. i am a beginner in java.
    import java.sql.*;
    import java.util.*;
    import DButil.*;
    public class StudentManager {
    /** Creates a new instance of StudentManager */
    public StudentManager() {
    Connection conn = null;
    Statement cs = null;
    public Vector getStudent(){
    try{
    dbutil.connectDB();
    String Query = "Select St_Record, St_L_Name, St_F_Name, St_Major, St_Email_Address, St_SSN, Date, St_Company, St_Designation";
    cs = conn.createStatement();
    java.sql.ResultSet rs = cs.executeQuery(Query);
    Vector Studentvector = new Vector();
    while(rs.next()){
    Studentinfo Student = new Studentinfo();
    Student.setSt_Record(rs.getInt("St_Record"));
    Student.setSt_L_Name(rs.getString("St_L_Name"));
    Student.setSt_F_Name(rs.getString("St_F_Name"));
    Student.setSt_Major(rs.getString("St_Major"));
    Student.setSt_Email_Address(rs.getString("St_Email_Address"));
    Student.setSt_Company(rs.getString("St_Company"));
    Student.setSt_Designation(rs.getString("St_Designation"));
    Student.setDate(rs.getInt("Date"));
    Studentvector.add(Student);
    if( cs != null)
    cs.close();
    if( conn != null && !conn.isClosed())
    conn.close();
    return Studentvector;
    }catch(Exception ignore){
    return null;
    }finally {
    dbutil.closeDB();
    import java.sql.*;
    import java.util.*;
    public class dbutil {
    /** Creates a new instance of dbutil */
    public dbutil() {
    Connection conn;
    public void connectDB(){
    conn = ConnectionManager.getConnection();
    public void closeDB(){
    try{
    if(conn != null && !conn.isClosed())
    conn.close();
    }catch(Exception excep){
    The main error is occuring at the following lines connectDB() and closeDB() in the class student manager. The class dbutil is in an another package.with an another file called connectionManager which establishes the connection with DB. The dbutil has the openconnection and close connection methods. I have not yet written the insert statements in StudentManager. PLease do Help me

    You're doing quite a few things that will cause errors, I'm afraid. I'll see if I can help you.
    The error you're asking about is caused by the following line:
    dbutil.connectDB();
    Now first of all please always ensure that your class names begin with capital letters and your instances of classes with lowercase letters. That's what everybody does, so it makes your code much easier to follow.
    So re-write the couple of lines at the beginning of your dbutil class like this:
    public class Dbutil {
    /** Creates a new instance of Dbutil */
    public Dbutil() {
    Now you need to create an instance of dbutil before you can call connectDB() like this:
    Dbutil dbutil = new Dbutil();
    now you can call the method connectDB():
    dbutil.connectDB();
    The problem was that if you don't create an instance first then java assumes that you are calling a static method, because you don't need an instance of a class to call a static method. If it was static, the method code would have been:
    public static void connectDB(){
    You have a fine example of a static method call in your code:
    ConnectionManager.getConnection();
    If it wasn't a static method your code would have to look like this:
    ConnectionManager connectionManager = new ConnectionManager();
    connectionManager.getConnection();
    See the difference? I also know that ConnectionManager.getConnection() is a call to a static method because it begins with a capital letter.
    Anyway - now on to other things:
    You have got two different Connection objects called conn. One is in StudentManager and the other is in Dbutils, and for the moment they have nothing to do with each other.
    You call dbUtil.connectDb() and so if your connectDb method is working properly you have a live connection called conn in your dbUtil object. But the connection called conn in StudentManager is still null.
    If your connection in the dbUtil object is working then you could just add a line after the call to connectDb() in StudentManager so that the StudentManager.conn object references the dbUtil.conn object like this:
    dbutil.connectDB();
    conn = dbUtil.conn;

  • Converting a string to Class object and calling its method

    I have recently moved to Java and I need help on this specific issue given below.
    I have to do this :
    ValModule1 val1 = new ValModule1();
    ValModule2 val2 = new ValModule2();
    if(val1.checkModule(xmlDocument)){
    $i++;
    There are many ValModule* classes and they all have the method called checkModule in them. I need to instantiate each class and run the checkMethod which returns true or false. My problem is that I am trying to get the name of the module (if it is ValModule1 or 2 or 3) from the user. What I get from the user is the name of the class for which I should call checkModule method on.
    how can I convert this string validationname given by the user and instantiate that class and call the method?
    I have tried this:
    String str="c:/xpathtest/src/Plugin_Config.xml";
    File xmlDocument = new File(str);
    String cls = "ValModule1"; // assuming this is what the user gave me
    Class t = Class.forName("ValModule1");
    Object o = t.newInstance();
    After that if I try
    if(o.checkModule(xmlDocument)){
    $i++;
    It gives me an error saying that it is not an existing method
    cannot resolve symbol
    [javac] symbol : method checkModule (java.io.File)
    [javac] location: class java.lang.Object
    [javac] if(o.checkModule(xmlDocument)){
    [javac] ^
    [javac] 1 error
    Can you please let me know where I am screwing up :-) ? If you need me to put both the programs I can do that too. Thanks in Anticipation

    I have recently moved to Java and I need help on this
    specific issue given below.
    I have to do this :
    ValModule1 val1 = new ValModule1();
    ValModule2 val2 = new ValModule2();
    if(val1.checkModule(xmlDocument)){
    $i++;
    There are many ValModule* classes and they all have
    the method called checkModule in them. I need to
    instantiate each class and run the checkMethod which
    returns true or false. My problem is that I am trying
    to get the name of the module (if it is ValModule1 or
    2 or 3) from the user. What I get from the user is
    the name of the class for which I should call
    checkModule method on.
    how can I convert this string validationname given by
    the user and instantiate that class and call the
    method?
    Define an interface containing the method all your classes have in common, cast the Object reference returned by newInstance to that interface, then you can call that method.
    Good Luck
    Lee

  • How to call a method of an other view in the current view

    Hi Guys,
    I have 2 views in my Project: IPrivateValidateIncidentView and IPrivateRoadMapView.  Now, a button in the IPrivateRoadMapView must call a method in the IPrivateValidateIncidentView.  I cannot seem to figgure this out.  I know that I will probably need to arrange things centrally in my Component COntroller somehow.
    I have tried to see what methods I can Invoke on IPrivateValidateIncidentView from within the Controller to see if I can call the method OnActionDoneValidate() from there, but I can only seem to get a constant with this methods name: IPrivateValidateIncidentView.WD_EVENTHANDLER_ON_ACTION_DONE_VALIDATION;
    Please help.
    Christiaan

    Hi,
    You are correct, for your requirement you need to arrange the things centrally that is in Component Controller. As in above reply you need to Create your context in Component controller and then map them to both the views. So data will be available to both the views and finally you create a method in component controller and call that method from second view. So the data changes made in controller will be reflected on First View as they have context mapping.
    Regards
    Raghu

  • Calling a method within an application?

    Hi I'm a student taking an intro Java class and right now I have to develop and application that prompts for someone to input a character of the alphabet and it will display the corresponding number on a telephone that it is listed under. The main method gets the input from the user and we are required to retrieve the corresponding digit to the character from a separate method using either a switch statement or a nested if-then-else statement to determine what the digit is. I'm having trouble calling that method in the main class which is another requirement. any suggestions?
    public class Hmwk08
         * Main driver begins program execution.
         * @param args program arguments
        public static void main(String[] args) throws Exception
            char letter;
            char ch;
            int relatesTo;
            PrintStream win = new PrintStream(System.out);
            Scanner in = new Scanner(System.in);
            String newLine = System.getProperty("line.separator");
            win.println("Given a letter of the alphabet, this program" + newLine
                        + "will tell you the corresponding digit on a" + newLine
                        + "telephone keypad.");
            win.println();
            win.print("Enter a letter: ");
            letter = in.nextLine().charAt(0);
            letter = Character.toUpperCase(letter);
         * Get the digit on a telephone keypad that corresponds
         * to the specified character. If the character is neither
         * a letter nor a digit, this method will retun the
         * asterisk character: '*'
         * @param letter the specified character
         * @return the corresponding digit
        private static char getPhoneDigit(char letter)
            char digit;
            digit = '*';
            if(letter == 'A' || letter == 'B' || letter == 'C')
                digit = '1';
            return digit;
    }

    Your method is static so you can call your method without creating a Hmwk08 object.
    char result = getPhoneDigit(letter);Would suffice in your main method
    Mel

  • Calling ABAP methods in Web-dynpro for ABAP

    Hi
    Can any one tell me how we can call any method which is defined in ABAP.
    eg.
    CALL METHOD ref_edit_chg->get_text_as_stream.
    This is the method i want to call in the first view.
    on the button action Process.
    Please reply at the earliest.
    Ragards,
    Rahul

    Hi Rahul,
    You can use WebServices, please have a look at below links,
    Re: The webdynpro/ABAP (WDA) calling RFC enabled FM of other ECC systems
    /people/thomas.jung3/blog/2004/11/15/bsp-150-a-developer146s-journal-part-xiii-developing-abap-webservices
    BSP a Developer's Journal Part XIV - Consuming WebServices with ABAP
    Regards,
    Nitin

  • Calling a Method in Web Dynpro ABAP

    Hi Experts,
    I have created a class in se24 and called its methods in web dynpro by simply creating its object. It is working fine. After that i came to know that method should be called through creating a service call in WD.
    What is the standard way and why?
    Thanks
    Ravindra.

    Hello Ravindra ,
                                  I think the better way is to create an assistance class ( Say A1)  and create an attribute (Say AC1) as object of your class ( Say  C1 ).
    In the costructor of you assistance class A1  you can instanciate the object of C1 .
    Now inside a method of assistance class you can call the method of C1 any time because AC1 is already instantiated .
    MVC architecture recommends you should have separate  method to aceess the data and you write your business logic in assitance class methods .
    Hope this will help you .
    Regards
    Vivek

  • Calling a method in the Custom ADF component from JSF page

    HI.
    I have created some custom compoents by extending the core ADF Components. Like i have a ComboBoxDefault component with it's ComboBoxDefaultTag.java and Controls.tld file.
    Now my requirement is i want to bind my label to this component from the JSF page. like
    <fwcontrols:label binding="#{listComponents.comboBoxDefaultLabel}" id="label1"/>
    <fwcontrols:comboBoxDefault binding="#{listComponents.cmbLocales}"
    value="en_GB" id="comboBoxDefault" autoSubmit="true" label="label1">
    <f:selectItems value="#{listComponents.locales}"/>
    </fwcontrols:comboBoxDefault>
    In my JSF page the label will have an id, and that id will be specified in the label tag of the component.
    In Tag.java file i have overrided the setProperty(FacesBean facesBean). In this method i have bind all my properties. In core JSF the setProperty method is provided with the UIComponent parameter, so i can call my method in component also. Which is not in case of ADF Faces.
    My main point is how i can call my method setLabel() which is in ComboBoxDefault.java so that i can set the label.
    Thanks in Advance.

    Thanks for all your replies. I want this kind of a functionality because Im trying to invove a DC (Child DC) from a Parent DC such that the Child DC's view is displayed onto the view container of the Parent DC. I have embedded using 'interface view of a component instance' in the Parent Window and am able to create the component and set usage though the onPlugDefault of the Child View.
    But I observe that when i make a call from the parent, the flow is like this:
    1. The wdDoInit of the Child Component Controller gets triggered first.
    2. Then the wdDoInit of the Child's <b>VIEW</b> gets triggered
    3. and <b>THEN</b> the onPlugDefault of the Child Component Interface View
    What I had actually wanted was to Fire onPlugDefault where Im calling a method LoadData(), after which the Child DC's view must be triggered so it can display the fetched data.
    What is actually happening is the view gets displayed, but no data is displayed in the view.
    Right now I have just given a work around where Im triggering <b>LoadData()</b> of the <b>COmponent COntroller</b> from the <b>wdDoInit</b> of the <b>VIEW</b>.
    Is there a better way to do this? I find it strange that I have to load the Data from the view.
    Thanks
    Jack

  • Call a method in the view from Component Controller

    Hi Friends,
    I have written the code for calling the RFC in Component Controller.
    My requirement is to change the properties of UI elements in the view, if I get any exception while calling RFC.
    Can Call a method in the view from Component Controller.
    Regards,
    Lakshmi Prasad.

    HI,
    You can get the error message during the exception of calling RFC in view itself.
    Any way you may call the RFC at some action in the view only.
    Can you explain me what you are trying to do?
    Kind Regards,
    Mukesh

  • How to call a method in bean from application module Impl?

    i have to call a method which is in a bean from AppmoduleImpl class. Is it possible ?

    The model layer should never depend on a specific view layer - this breaks reusability.
    What you need to do is expose a service method on your AM. Then your view can call this method and pass a parameter into the model layer.

Maybe you are looking for