Mock objects calling parent constructor

I'm trying to create some tests in which I'm providing a mock object to the constructor of my test objects and testing that appropriate methods are called in the mock. The objects I'm mocking only have a few public methods so I created an inner class that extends the object I'm trying to mock and just records which method was called. However, when I run the test it fails because the mock object calls the default constructor of the object of it's parent; causing the entire application to run. I'm trying to figure out a way around this.
Now I already know a solution that would work, creating a second constructor in the object I'm mocking which does nothing, then call the fake constructor from my mock object instead of the default constructor. The solution dosn't feel very elegent though, I'm wondering if I'm missing a simpler solution?

dsollen wrote:
I'm testing JMS communication between two applications. Each topic Listener has a reference to the main class of the respective applications to communicate with them.I still don't see why a call to the constructor should start the program. Change the design so that doesn't happen. You should instead provide a start method.
Kaj

Similar Messages

  • How to call parent constructor from subtype body ?

    create or replace TYPE person as object(
    p_name varchar2(10),
    p_age NUMBER,
    p_status CHAR,
    p_addr addr_type,
    constructor function person ( p_name char, p_age NUMBER, p_status CHAR, p_addr addr_type ) RETURN SELF AS RESULT
    )NOT FINAL;
    -- subclass
    create or replace TYPE employee under person(
    e_number number,
    hire_date date,
    e_designation varchar2(15),
    constructor function employee ( e_name char, e_age NUMBER, e_status CHAR,
    e_addr addr_type, e_number NUMBER, hire_date date, e_designation CHAR )
    return SELF AS RESULT
    In this scenario how do we call parent constructor from employee type ?

    Can't You write complete example? Tried few variants but get nothing:(

  • Parent constructor calls abstract method

    Hi everybody!
    I'm wondering if there is something wrong with java or if the idea is just too ill?
    Anyway, I think it would be great if this hierachy would work...
    Two classes A and B.
    Class A defines an astract method.
    In A's constructor this abstract method is called.
    Class B extends A and provides an implementation for the abstract method in A.
    Class B also defines a member variable that is set in B's implementation of the abstract method.
    In class' B constructor the parent constructor A() is called.
    example:
    public abstract class A {
      public A() {
        createComponents();
      public abstract void createComponents();
    public class B extends A {
      private String string = null;
      public B() {
        super();
        System.out.println("B::B() " + string);
      public void createComponents() {
        System.out.println("B::createComponents() begin");
        string = new String("test");
        System.out.println("B::createComponents() " + string);
      public void describe() {
        System.out.println("B::describe() " + string);
      public static void main(String[] args) {
        B b = new B();
        b.describe();
    }running the code above produces the following output:
    B::createComponents() begin
    B::createComponents() test
    B::B() null
    B::describe() null
    why is the string member variable null in B's constructor??
    thanks in advance
    Peter Bachl
    Polytechnic University of Upper Austria, Hagenberg
    [email protected]

    The answer is that the call of the super-constructor
    is allways done before the initialization
    of the member variable. That's all and that's the
    normal behavior.
    order :
    - initialization of static variables
    - call to the super-constructor
    - initialization of the instance variables
    - execution of the constructor
    Since this is the advanced forum it is relevant to point out that that is not exactly true.
    There is a step in java that 'initializes' member variables before any constructors are called, super or other wise.
    From the JLS 12.5...
    Otherwise, all the instance variables in the new object, including those declared in superclasses, are initialized to their default values (4.5.5)
    Using the following code as an example
      class MyClass
         int i1;
         int i2 = 1;
    .When creating an instance of the above there will be three 'initializations'
    // Part of object creation...
    i1 = 0; // The default value
    i2 = 0; // The default value
    // Part of construction...after super ctors called.
    i2 = 1; // The variable initializer (see step 4 of JLS 12.5)
    Unfortunately the descriptions are rather similar and so confusion can result as to when the assignment actually occurs.

  • Calling a constructor of an object that extends another object

    suppose you have the source:
    class A {
    public int x = 1;
    public int y = 5;
    public A(){y = 6;)
    class B extends A {
    public B(){}
    public B(int a) { super(a); }
    Now suppose in the main function you say
    B b1 = new B();
    I would think the value of x is 1 which it is, but the value of y is 6, why is this, I did not call the A constructor or does an object call the parameterless constructor of its superclass automatically. If that is the case, it will clarify to me why y gets the value of 6 and not 5.

    Unless you specify a super call, it will be done. The next two constructors are the same:public B () {
        x = 2;
    public B () {
        super ();
        x = 2;
    }Another thing for you to try: remove the A () constructor (but keep the A (int)) and see if B will still compile.
    Kind regards,
    Levi

  • Create an object instance without calling its constructor?

    Hi,
    Sometimes it's useful to create object instances without calling their constructor. When? For example object deserialization.
    By default when deserializating an object, the instance in the VM is created by calling the default constructor of the first non Serializable super-class (if you don't have such you're in trouble). I think that the db4o object database don't even call any constructor you may have written.
    So such thing exists, but how is this possible? I fugured out that sun's deserialization mechanism first finds the constructor of the first non Serializable super-class and then:
    cons = reflFactory.newConstructorForSerialization(cl, cons); Here I'm stuck.
    Here's the source of the method for finding serializable constructor:
         * Returns subclass-accessible no-arg constructor of first non-serializable
         * superclass, or null if none found.  Access checks are disabled on the
         * returned constructor (if any).
        private static Constructor getSerializableConstructor(Class cl) {
         Class initCl = cl;
         while (Serializable.class.isAssignableFrom(initCl)) {
             if ((initCl = initCl.getSuperclass()) == null) {
              return null;
         try {
             Constructor cons = initCl.getDeclaredConstructor(new Class[0]);
             int mods = cons.getModifiers();
             if ((mods & Modifier.PRIVATE) != 0 ||
              ((mods & (Modifier.PUBLIC | Modifier.PROTECTED)) == 0 &&
               !packageEquals(cl, initCl)))
              return null;
             cons = reflFactory.newConstructorForSerialization(cl, cons);
             cons.setAccessible(true);
             return cons;
         } catch (NoSuchMethodException ex) {
             return null;
        }So any info about this ReflectionFactory, and the problem as a whole?
    Thanks.

    So the question is how to create object instance without initializing it (calling the constructor)? And if you have any info about ReflectionFactory it will be useful too.
    When serializing an object you save all its fields and some extra info. When you deserialize it you have to reconstruct it, by copying the fields back, but not to reinitialize.
    import java.lang.reflect.*;
    import java.io.Serializable;
    import java.security.AccessController;
    import sun.reflect.ReflectionFactory;
    public class Test0 implements Serializable {
        public Test0() {
            System.out.println("Test0");
        public static void main(String[] args) throws Exception {
            Constructor<Test0> constr = reflectionFactory.newConstructorForSerialization(Test0.class, Object.class.getConstructor(new Class[0]));
            System.out.println(constr.newInstance(new Object[0]).getClass());
        private static final ReflectionFactory reflectionFactory = (ReflectionFactory)
         AccessController.doPrivileged(
             new ReflectionFactory.GetReflectionFactoryAction());
    }When you execute this piece you get:
    class Test0

  • JUNIT : how to call static methods through mock objects.

    Hi,
    I am writing unit test cases for an action class. The method which i want to test calls one static method of a helper class. Though I create mock of that helper class, but I am not able to call the static methods through the mock object as the methods are static. So the control of my test case goes to that static method and again that static method calls two or more different static methods. So by this I am testing the entire flow instead of testing the unit of code of the action class. So it can't be called as unit test ?
    Can any one suggest me that how can I call static methods through mock objects.

    The OP's problem is that the object under test calls a static method of a helper class, for which he wants to provide a mock class
    Hence, he must break the code under test to call the mock class instead of the regular helper class (because static methods are not polymorphic)
    that wouldn't have happened if this helper class had been coded to interfaces rather than static methods
    instead of :
    public class Helper() {
        public static void getSomeHelp();
    public class MockHelper() {
        public static void getSomeHelp();
    }do :
    public class ClassUnderTest {
        private Helper helper;
        public void methodUnderTest() {  // unchanged
            helper.getSomeHelp();
    public interface Helper {
        public void getSomeHelp();
    public class HelperImpl implements Helper {
        public void getSomeHelp() {
            // actual implementation
    public class MockHelper implements Helper {
        public void getSomeHelp() {
            // mock implementation
    }

  • How to call the grand parent constructor from the child ??

    Hi All,
    I am having 3 classes.
    Class A.
    Class B extends Class A.
    Class C extends Class A
    i need to call the constructor of ClassA from Class C. how to call ??
    Thanks,
    J.Kathir

    Each class will implicitly call the parent default constructor if you do not call it in the code ie
    super();However you can call any of the parent constructors ie
    class Parent {
        int value;
        Parent(int v) {
            value = v;
        public void display() {
            System.out.println(value);
    class Child extends Parent {
        Child(int v) {
            super(v);
        public static void main(String[] args) {
            Child c = new Child(10);
            c.display();
    }

  • LVOOP "call parent method" doesn't work when used in sibling VI

    It seems to me that the "call parent method" doesn't work properly according to the description given in the LabVIEW help.
    I have two basic OOP functions I am doing examples for. I can get one to work easily and the other one is impossible.
    Background
    There are 3 basic situations in which you could use the "call parent method"
    You are calling the parent VI (or method) of a child VI from within the child VI
    You are calling the parent VI (or method) of a child VI from within a sibling VI
    You are calling the parent VI (or method) of a child VI from a different class/object.
    From the LabVIEW help system for "call parent method":
    Calls the nearest ancestor implementation of a class method. You can use the Call Parent Method node only on the block diagram of a member VI that belongs to a class that inherits member VIs from an ancestor class. The child member VI must be a dynamic dispatching member VI and have the same name as the ancestor member VI
    From my reading of that it means situation 3 is not supported but 1 & 2 should be.
    Unfortunately only Situation 1 works in LabVIEW 2012.
    Here is what I want
    And this is what I actually get
    What this means is that I can perform a classic "Extend Method" where a child VI will use the parent's implementation to augment it's functions BUT I cannot perform a "Revert Method" where I call the parent method's implementation rather than the one that belongs to the object.
    If you want a picture
    Any time I try and make operation2 the VI with the "call parent method" it shows up for about 1/2 sec and then turns into operation.
    So there are only 3 possibilities I can see
    Bug
    Neither situation 2 or 3 are intended to work (see above) and the help is misleading
    I just don't know what I am doing (and I am willing to accept this if someone can explain it to me)
    The downside is that if situation 2 above doesn't work it does make the "call parent node" much less usefull AND it's usage/application just doesn't make sense. You cannot just drop the "call parent node" on a diagram, it only works if you have an existing VI and you perform a replace. If you can only perform situation 1 (see above) then you should just drop the "call parent node" and it picks up the correct VI as there is only 1 option. Basically if situation 2 is not intended to work then the way you apply "call parent method" doesn't make sense.
    Attachements:
    For the really keen I have included 2 zip files
    One is the "Revert Method labVIEW project" which is of course not working properly because it wants to "call parent method" on operation not operation2
    The other zip file is all pictures with a PIN for both "Revert Method" and "Extend Method" so you can see the subtle but important differences and pictrures of the relavant block diagrams including what NI suggested to me as the original fix for this problem but wasn't (they were suggesting I implement Extend Method).
     If you are wondering where I got the names, concepts and PIN diagrams from see:
    Elemental Design Patterns
    By: Jason McColm Smith
    Publisher: Addison-Wesley Professional
    Pub. Date: March 28, 2012
    Print ISBN-10: 0-321-71192-0
    Print ISBN-13: 978-0-321-71192-2
    Web ISBN-10: 0-321-71255-2
    Web ISBN-13: 978-0-321-71255-4
     All the best
    David
    Attachments:
    Call parent node fault.zip ‏356 KB
    Call parent node fault.zip ‏356 KB

    Hi tst,
    Thankyou for your reply. Can you have a look at my comments below on the points you make.
    1) Have to disagree on that one. The help is unfortunately not clear. The part you quote in your reply only indicates that the VI you are applying "Call Parent Node" to must be dynamic dispatch. There is nowhere in the help it actually states that the call parent node applies to the VI of the block diagram it is placed into. Basically case 2 in my example fulfills all that the help file requires of it. The dynamic dispatch VI's operation are part of a class that inherits from a given ancestor. Operation 2 for Reverted behaviour is a child VI that is dynamic dispatch and has the same name as the ancestor VI (operation2). The help is missing one important piece of information and should be corrected.
    2) True it does work this way. I was trying to build case 2 and had not yet built my ancestor DD for operation so the function dropped but wasn't associated with any VI. I was able to do this via a replace (obviously once the ancestor Vi was built) so this one is just bad operator
    3) Keep in mind this is an example not my end goal. I have a child implementation because this is a case where I am trying to do a "reverse override" if you like.
    3a) The point of the example is to override an objects method (operation2) with it's parent's method NOT it's own. The reason there is a child implementation with specific code is to prove that the parent method is called not the one that relates to the object (child's VI). If I start having to put case structures into the child VI I make the child VI have to determine which code to execute. The point of Revert method is to take this function out of the method that is doing the work. (Single Use Principal and encapsulation)
    3b) The VI I am calling is a Dynamic Dispatch VI. That means if I drop the superclass's VI onto the child's block diagram it will become the child's implementation. Basically I can't use Dynamic Dispatch in this case at all. It would have to be static. That then means I have to put in additional logic unless there is some way to force a VI to use a particular version of a DD VI (which I can't seem to find).
    Additional Background
    One of the uses for "Revert Method" is in versioning.
    I have a parent Version1 implementation of something and a child Version2. The child uses Version2 BUT if it fails the error trapping performs a call to Version1.
    LabVIEW has the possibility of handling the scenario but only if both Case 1 and Case 2 work. It would actually be more useful if all 3 cases worked.
    The advantage of the call parent method moving one up the tree means I don't have the track what my current object is and choose from a possible list, if, for example the hierarchy is maybe 5 levels deep. (so V4 calls V3 with a simple application of "call parent method" rather than doing additional plumbing with case structures that require care and feeding). Basically the sort of thing OOP is meant to help reduce. Anything that doesn't allow case 2 or 3 means you have to work around the limitation from a software design perspective.
    If at the end of the day Case 2 and case 3 don't and won't ever work then the help file entry needs to be fixed.
    All the best
    David

  • How to call parent procedure in child type?

    i have two types,A and B.
    B inherits from A and overrides a procedure 'prints',
    then how call A's prints method in B?
    following is codes:
    create or replace type A as object (
    rowsID integer;
    member procedure printRowsID
    create or replace type body A as
    member procedure printMembers is
    begin
    dbms_output.put_line(rowsID);
    end;
    end;
    create or replace type B under A (
    roundNO number(2),
    overriding member procedure printMembers
    create or replace type B as
    overriding member procedure printMembers is
    begin
    dbms_output.put_line(roundNO);
    /*here i also want to print attribute value of 'rowsID',
    but how to call parent's procedure which is overrided? */
    end;
    end;

    A.<<method>> syntax is wrong here because method is
    not static.
    Unfortunately Oracle doesn't have the syntax like C++ -
    A::<<method>> - which allows you to call methods of
    superclasses directly.
    TREAT function also can't help you because even if
    you treat SELF as supertype Oracle will work with
    real type of object:
    SQL> create or replace type A as object (
      2  rowsID integer,
      3  member procedure printMembers
      4  ) not final
      5  /
    &nbsp
    Type created.
    &nbsp
    SQL> create or replace type body A as
      2  member procedure printMembers is
      3   begin
      4    dbms_output.put_line('Class A - ' || rowsID);
      5   end;
      6  end;
      7  /
    &nbsp
    Type body created.
    &nbsp
    SQL> create or replace type B under A (
      2  roundNO number(2),
      3  member procedure whatisit
      4  )
      5  /
    &nbsp
    Type created.
    &nbsp
    SQL> create or replace type body B as
      2 
      3  member procedure whatisit
      4  is
      5   aself a;
      6  begin
      7   select treat(self as a) into aself from dual;
      8   if aself is of (b) then
      9     dbms_output.put_line('This is B');
    10   else
    11     dbms_output.put_line('This is A');
    12   end if;
    13  end;
    14 
    15  end;
    16  /
    &nbsp
    Type body created.
    &nbsp
    SQL> declare
      2   bobj b := b(1,2);
      3  begin
      4   bobj.whatisit;
      5  end;
      6  /
    This is B
    &nbsp
    PL/SQL procedure successfully completed. One of workarounds is to use type-specific non-overrided
    static method:
    SQL> create or replace type A as object (
      2  rowsID integer,
      3  member procedure printMembers,
      4  static procedure printA(sf A)
      5  ) not final
      6  /
    &nbsp
    Type created.
    &nbsp
    SQL> create or replace type body A as
      2 
      3  member procedure printMembers is
      4   begin
      5    A.printA(self);
      6   end;
      7 
      8  static procedure printA(sf A)
      9  is
    10   begin
    11    dbms_output.put_line('Class A - ' || sf.rowsID);
    12   end;
    13 
    14  end;
    15  /
    &nbsp
    Type body created.
    &nbsp
    SQL> create or replace type B under A (
      2  roundNO number(2),
      3  overriding member procedure printMembers
      4  )
      5  /
    &nbsp
    Type created.
    &nbsp
    SQL> create or replace type body B as
      2 
      3  overriding member procedure printMembers
      4  is
      5   begin
      6    dbms_output.put_line('Class B - ' || roundNo);
      7    A.printA(self);
      8   end;
      9  end;
    10  /
    &nbsp
    Type body created.
    &nbsp
    SQL> declare
      2   b1 b := b(1,2);
      3  begin
      4   b1.printMembers;
      5  end;
      6  /
    Class B - 2
    Class A - 1
    &nbsp
    PL/SQL procedure successfully completed.Rgds.

  • Varray of Objects: Initializing, Instantiation, Constructors, ORA-06531

         This is supposed to fill a varray with ten objects, calling methods in those objects and populating the objects from queries, then display fields from the objects via methods.  Error message is in comment at bottom.  Any ideas?
    -- Enable screen I/O
    SET SERVEROUTPUT ON SIZE 1000000
    SET VERIFY OFF
    -- object spec
      CREATE OR REPLACE TYPE employee4 AS OBJECT
      o_ename CHAR (20 char),
      o_empno NUMBER (4),
      o_sal NUMBER (10),
      o_thisno NUMBER (4),
      MEMBER FUNCTION get_o_ename RETURN CHAR, MEMBER PROCEDURE set_o_ename (o_thisno IN number),
      MEMBER FUNCTION get_o_empno RETURN NUMBER, MEMBER PROCEDURE set_o_empno (o_thisno IN number),
      MEMBER FUNCTION get_o_sal RETURN NUMBER, MEMBER PROCEDURE set_o_sal (o_thisno IN number),
      CONSTRUCTOR FUNCTION employee4 (o_ename CHAR,o_empno NUMBER,o_sal NUMBER,o_thisno NUMBER) RETURN SELF AS RESULT
    -- object body
      CREATE OR REPLACE TYPE BODY employee4 AS
      CONSTRUCTOR FUNCTION employee4 (o_ename IN CHAR,
      o_empno IN NUMBER,
      o_sal IN NUMBER,
      o_thisno IN NUMBER)
      RETURN SELF AS RESULT IS
      BEGIN
      SELF.o_ename := o_ename;
      SELF.o_empno := o_empno;
      SELF.o_sal := o_sal;
      SELF.o_thisno := o_thisno;
      RETURN;
      END;
      -- gets
      MEMBER FUNCTION get_o_ename RETURN CHAR IS
      BEGIN
      RETURN self.o_ename;
      END;
      MEMBER FUNCTION get_o_empno RETURN NUMBER IS
      BEGIN
      RETURN self.o_empno;
      END;
      MEMBER FUNCTION get_o_sal RETURN NUMBER IS
      BEGIN
      RETURN self.o_ename;
      END;
      -- sets
      MEMBER PROCEDURE set_o_ename(o_thisno IN number) IS
      BEGIN
      SELECT ename INTO SELF.o_ename FROM emp WHERE empno = SELF.o_thisno;
      END;
      MEMBER PROCEDURE set_o_empno(o_thisno IN number) IS
      BEGIN
      SELECT empno INTO SELF.o_empno FROM emp WHERE empno = SELF.o_thisno;
      END;
      MEMBER PROCEDURE set_o_sal(o_thisno IN number) IS
      BEGIN
      SELECT sal INTO SELF.o_sal FROM emp WHERE empno = SELF.o_thisno;
      END;
      END;
    DECLARE
      -- a varray of employees
      TYPE emp_varray1 IS VARRAY(10) OF employee4;
      varray_of_emps  EMP_VARRAY1;
      -- List of EMPNO's in order of appearance in EMP table (for cross-referencing, single-line retrieval)
      TYPE MYCREF_VARRAY IS VARRAY(10) OF NUMBER(4);
      varray_mycref MYCREF_VARRAY := MYCREF_VARRAY(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
      -- make a variable to store one empno
      thisno NUMBER(4);
      -- make a counter
      counter INT;
      -- query variables for the set calls
      q_ename CHAR(20 CHAR);
      q_empno NUMBER(4);
      q_sal NUMBER(10);
    BEGIN
      -- Put the first 10 EMPNO's in my cref array
      SELECT empno BULK COLLECT INTO varray_mycref FROM emp WHERE ROWNUM < 11;
      -- Use a loop to retrieve the first 10 objects in the "emp" table and put them in the varray of objects
      FOR counter IN 1..10 LOOP
      thisno := varray_mycref(counter);
      varray_of_emps(counter).set_o_ename(thisno);
      varray_of_emps(counter).set_o_empno(thisno);
      varray_of_emps(counter).set_o_sal(thisno);
      END LOOP;
      -- Use another loop to display the information in the reverse order.
      FOR counter in REVERSE 1..10 LOOP
      dbms_output.put_line((varray_of_emps(counter).get_o_ename()) || CHR(9) || (varray_of_emps(counter).get_o_empno()) || CHR(9) || (varray_of_emps(counter).get_o_sal()));
      END LOOP;
    END;
      This results in the following response in SQL*PLUS:
    Type created.
    Type body created.
    DECLARE
    ERROR at line 1:
    ORA-06531: Reference to uninitialized collection
    ORA-06512: at line 33

    Hi,
    From metalink:
    Cause: An element or member function of a nested table or varray was
    referenced (where an initialized collection is needed) without the
    collection having been initialized.
    Action: Initialize the collection with an appropriate constructor or
    whole-object assignment.
    ORA 6531 Reference to uninitialized collection (Doc ID 48912.1)

  • Call a constructor as an array

    suppose there is a constructor that takes an argument
    public ball(int radius){
    this.radius=radius;
    now I need to call array of constructor ball(radius). how do i do it?
    thanks

    csckid wrote:
    suppose there is a constructor that takes an argument
    public ball(int radius){
    this.radius=radius;
    now I need to call array of constructor ball(radius). how do i do it?You don't really call the constructor. It gets called when you create an object using new. So to fill an array with ball objects you create the number of objects you need and assign them to the ball array elements.

  • Why it is needed to invoke parent constructor?

    public class AAA
    public AAA(int a) {  }
    public class BBB extends AAA
    public BBB(int a) { super(a); }
    public BBB() {  }
    It gives an error in the second constructor of class BBB. Why? Why Java requires AAA to have an AAA() constructor???
    Maciek

    public class AAA
    public AAA(int a) {  }
    public class BBB extends AAA
    public BBB(int a) { super(a); }
    public BBB() {  }
    It gives an error in the second constructor of class
    BBB. Why? Because you have not explicitely called a parent constructor, the compiler will add an implicit call to the no-args parent constructor thus:
    super();But the no-args constructor does not exist in the superclass!
    The compiler only creates a default constructor if you do not explicitely declare any constructors, so since you have declared a constructor that takes an argument, and have not declared a constructor that takes no arguments, AAA does not have a no-args constructor.
    Why Java requires AAA to have an AAA()
    constructor???It doesn't - it only requires it to have at least one constructor. But the code you have in BBB tries to call the non-existent AAA() constructor. You must either explicitely declare the no-args constructor, or explicitely call an existing constructor from every constructor in every subclass.

  • Cannot call parametrized  constructor

    I have a class which extends an abstract class and have the following problem:
    - When i use the default constructor, all works fine
    - When i try to use the 'parametrized' constructor, compile fails....
    Any suggestions, sorry if i oversee any 'elementary coding'....
    calling class
    package testAbstract;
    public class FinalAbstract extends BaseAbstract {
         * Launches this application
        public static void main(String[] args) {
            FinalAbstract myApplication = new FinalAbstract();           // this works
            // FinalAbstract myApplication = new FinalAbstract(true);    // this doesn't
            myApplication.setTitle("AbstractTest");
        public void activateApplication() {
    abstract class
    package testAbstract;
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.Toolkit;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    public abstract class BaseAbstract extends JFrame {
        // Variables
        private static boolean isTestVal = false;
        // Swing objects and varialbles
        private JPanel jContentPane;
         * This is the default constructor
        public BaseAbstract() {
             this(isTestVal);
         * This constructor contains a parameter
        public BaseAbstract(boolean isValue) {
            System.out.print("Executing BaseAbstract(boolean isValue()");
            System.out.print("isValue = " + isValue);
            // Start Application
            initialize();
        public abstract void activateApplication();
        private void initialize() {
            setContentPane(getJContentPane());
            setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
            setTitle("MyBaseAbstractApplication");
            setSize(400,300);
            setVisible(true);
            //Validate
            this.validate();
            //Center the window
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            Dimension frameSize = this.getSize();
            if (frameSize.height > screenSize.height) {
              frameSize.height = screenSize.height;
            if (frameSize.width > screenSize.width) {
              frameSize.width = screenSize.width;
            setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
        private JPanel getJContentPane() {
            if (jContentPane == null) {
                jContentPane = new JPanel();
                jContentPane.setLayout(new BorderLayout());
                jContentPane.add(new javax.swing.JLabel("Test"), java.awt.BorderLayout.CENTER);
            return jContentPane;
    }

    Thanks.
    I changed the code as in example which can be compiled now.
    So, i have to declare constructors without any code but with parameters only?
    Can i add some specific code here? If so, which code is executed?
    Now, when executing the code, the parameter is not ported..., the print.out statement shows a value of 'false' whereas i call the constructor with 'true'
    package testAbstract;
    public class FinalAbstract extends BaseAbstract {
         * Launches this application
        public static void main(String[] args) {
            boolean isValue = true;
            // FinalAbstract myApplication1 = new FinalAbstract();           // this works
            FinalAbstract myApplication2 = new FinalAbstract(isValue);    // this doesn't
            // myApplication1.setTitle("AbstractTest without parameter");
            myApplication2.setTitle("AbstractTest with parameter");
        public FinalAbstract(){}
        public FinalAbstract(boolean isValue) {}
        public void activateApplication() {
    }

  • How call the constructor of the super type in the sub type?

    Hi, everybody:
    There are two type as belowing code:
    CREATE TYEP super_t AS OBJECT (
    a NUMBER(7,1),
    b NUMBER(7,1),
    CONSTRUCTOR FUNCTION super_t
    (a IN NUMBER:=null, b IN NUMBER:=null) RETURN SELF AS RESULT
    ) NOT FINAL;
    CREATE TYEP sub_t UNDER super_t (
    CONSTRUCTOR FUNCTION sub_t RETURN SELF AS RESULT
    Because super_t has the constructor that can pass 0 to two parameters, does the constructor of the sub_t can call the constructor of the super_t to create the instance of the sub_t?
    If can, how call?
    If not, need to rewrite the code as the constructor of the super_t in the constructor of the sub_t?
    Thank you very much!

    No the supertype constructor is not automatically called (that should have been trivial for you to prove to yourself). Unfortunately, you can't call it from the subtype either (there is functionality like Java's 'super'). You could define a named method in the supertype that does the initialization and call that in both the constructors however.

  • Why Can't I call a constructor?

    Hello all,
    Why cant i call a constructor as a function?, just like any other function by its name?...
    class Test{
         Test(){
        void func(){
             Test();    // why cant i do this?
    To me it looks just like another function. So whats the wrong in calling it as a function?...

    It says "Method not found" because there is no method Test() in your class, only a constructor with that name (without parameters), as already mentioned by a previous poster. Try to replace the line by new Test(); and it should work. But note that this will create a new object of the class and so, doesn't make any sense.
    Think of constructors being only called when creating a new object. So you don't want "to call the constructor again", because the object already exists.
    Constructors and methods are really something very different. You might have a look at the Java tutorial for further details:
    http://java.sun.com/docs/books/tutorial/java/index.html

Maybe you are looking for

  • My iPhone suddenly turned off by itself and it won't turn back on, what to do?

    So I was just texting with my iPhone (with 35% battery life) earlier and when I check my phone again 5 mins later, it completely turned off. So, I tried holding the sleep/lock botton on top + the Home button (for more than 10 sec) and it won't turn o

  • Too small UI fonts at Thunderbird [SOLVED]

    Then fonts are unreadably small - here is a screenshot: The same small fonts are all over the UI - in menus and other items. How could I fix them?

  • Array of JTextFields

    If I have an array of JTextFields e.g. tf = new JTextField[i] for 1<i<46, how can I get the cursor to automatically tab to the next field once a string of numbers has been inputted to one of them. I'm trying to design a Scan Frame for barcodes and I

  • Apple Video Player Replacement

    I just got a PowerMac G3 with a/v in out to replace my Quadra 840av. The main purpose of this system is to convert S-Video to RBG(VGA). System came with 10.2.8 installed and no System 9 folder. :O So I replaced the noisy HDD and added some more ram.

  • In need of earloop bh 703

    Hi, Got a gift from my girl friend - a superb bh 703. But i;ve lost the earloop from it - it's that small piece of metal that hangs the bluetooth to my ear. I've called Nokia USA and they've told me that they can't sell only this part. SO i'm asking