Inherit / extend class calls constructor...

Hi,
Class A extends class B like so:
public class A extends B{}
Why is class B's constructor called? I thought when A extends
B, A gets all of B's methods and variables, great; but I don't need
the constructor called because class B has already been created. I
just want class A to inherit all of B's methods and variables. Can
a class have two constructors, so when I extend class B an empty
constructor is called but when I instantiate it the constructor
with code is called?
I feel like I’m missing something here.
Thanks,
4dplane

Yep you are missing something. :)
The constructor is just that -- it builds each instance of
the class, puts it together if you will. Without a call to the
superclass's constructor you won't get all its properties, methods,
etc.
You'll notice that the B constructor is even call first. That
is to make sure that everything is ready and accessable to A
It sounds like whatever you are trying to do isn't really a
good candidate for extension.. Fill us in a bit more and perhaps we
can come up with some ideas..

Similar Messages

  • When extending class do constructors get implemented as well

    Say i need to call a list as an object and it was an extension of another list. Would the constructor be the same but with the extended list name??
    For example:
    First class:
    public class ListR
            //variables
         public ListModelR()
              trackCount = 0;
              firstTrack = null;
              lastTrack = null;
         }///rest of code...
    Would the class that extended this hav a constructor of its class name or would i have to reference ListModelR?
    Thanks James

    You cant have a constructor that is different from your classes name.
    class A
         public A()
              int a = 5;
    class B
         public B()
              super(); //executes the super class's default constructor
    }

  • Extending classes and constructors

    Hi,
    I am extending a class like this:
    public class MyTreeCellRenderer extends CheckableTreeCellRenderer
         public MyTreeCellRenderer()
    The super class has a constructor:
    public class CheckableTreeCellRenderer extends DefaultTreeCellRenderer
    public CheckableTreeCellRenderer()
    checkStyle = CHECKMARK;
    But I cannot instantiate my newly created class. What is the reason for this? Something wrong with the constructors?
    ERROR MESSAGE:
    symbol : constructor MyTreeCellRenderer ()
    location: class MyTreeCellRenderer
              MyTreeCellRenderer renderer = new MyTreeCellRenderer();

    Didn't you define the constructor of MyTreeCellRendered with some arguments?

  • How to inherit super class constructor in the sub class

    I have a class A and class B
    Class B extends Class A {
    // if i use super i can access the super classs variables and methods
    // But how to inherit super class constructor
    }

    You cannot inherit constructors. You need to define all the ones you need in the subclass. You can then call the corresponding superclass constructor. e.g
    public B() {
        super();
    public B(String name) {
        super(name);
    }

  • Authoring Tool "Inherit Class" vs "New Class" vs "Extended Class" Scenario Help

    Hi Community,
    I am currently creating the ground work needed to create Self Service Portal Request Offerings to be used by end users and then take that input and automate it with Orchestrator.
    I'm pretty comfortable with the overall process of how this is done, but I was hoping to get guidance from the community to make sure that I don't waste my time by editing my existing management pack incorrectly from the beginning.
    We currently have a Whole bunch of SR and IR Templates in a Management Pack - lets call it: "Company.Templates.MP" now what I want to do is edit this MP and add new List and String Properties to hold the responses provided from the
    Self Service Portal so that I can use a Runbook Activity to feed these responses into Orchestrator.
    Now what I have done is "Extended" the existing "Service Request" and "Incident" classes and created the new properties in each extended class. Now that I have Extended the default Classes I believe that the properties now apply
    to EVERY existing and new SR and IR.
    My question is... Do you think I have done this correctly?
    I have a gut feeling that I have done it wrong and I should revert my MP changes and then instead of extending the existing IR and SR Classes which affect all existing Work Items, I should create a new SR and IR class which would then be used to create new
    Templates which are then ONLY ones that contain the new properties that would be used for Runbook Automation.
    The feedback I receive will be VERY MUCHLY appreciated...

    Answering your implicit question in the title:
    Inherit is where you create a new class that has all the properties of the parent and then some new ones also, but people can still use the parent for regular work. This is for specialization, like say you want a new type of incident to
    cover firewall problems, and need new properties for the IP and Ports from the portal.
    Extended would be where you add properties to a class that make sense for all of those and all inheriting classes. say the client has a cost of IT tracking system where every Incident and Service Request needs to be assigned a cost of effort
    code, you would create two extensions for Incident and Service request, and point them at the same enum list. you wouldn't extend WorkItem, because changes, activities, released etc wouldn't use a simple cost estimate list value, and you wouldn't inherit off
    of SR and IR because all user requests should have this property, even if some of them are blank  
    New would be a class from scratch that inherits from Entity. This is hardly ever what you want to do, because even completely new things are either work items or config items, and should, where ever possible, inherit from one of those
    basil classes
    Now to your explicit question: No, i think you've done exactly what the situation called for. every SR should have this value, even if it is empty for the historical items.
    two side notes: 1) any item that refers to the base of an extension will continue to work as expected, but  2) Offerings are always the exception. The net of these two rule of thumb guidelines is that your existing templates should continue to work
    without modification, but you may have to recreate the offering before you can use the new property in a question.  
    AFAIK you cannot extend an abstract calls (ex. Work Item), but I could be wrong.
    http://codebeaver.blogspot.dk/

  • Calling constructor of super class

    Hello everyone! I'm a student. I hope I can find guidance. Here's the issue:
    Super class: Property
    Sub class: House
    constructor of parent class:
    protected Property(String id, char status, String address,
            String tenet, String landlord, long rent, char freq,
            long amtDue, String date, boolean repair, char tradesman)
            this.id = id;
            this.status = status;
            this.address = address;
            this.tenet = tenet;
            this.landlord = landlord;
            this.rent = rent;
            this.freq = freq;
            this.amtDue = amtDue;
            this.repair = repair;
            this.tradesman = tradesman;
            SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yy");
            this.dateDue = formatter.parse(date, new ParsePosition(0));
        }the constuctor of the sub class:
    public House(String id, char status, String address,
            String tenet, String landlord, long rent, char freq,
            long amtDue, String dateDue, boolean repair, char tradesman,
            int broom, int proom, int throom, boolean garden,
            boolean garage, boolean heating)
        super(id, status, address, tenet, landlord, rent, freq,
            amtDue, dateDue, repair, tradesman);
        this.broom = broom;
        this.proom = proom;
        this.throom = throom;
        this.garden = garden;
        this.garage = garage;
        this.heating = heating;
        }I'm sure you notice I'm calling the constructor of the Property in House. That;s where the error is when i try to compile either class. This is the error it shows within the House class.
    Object() in java.lang.Object cannot be applied to (java.lang.String,char,java.lang.String,java.lang.String,java.lang.String,long,char,long,java.lang.String,boolean,char)
    Maybe its elementary? Thanks in advance..

    You haven't pasted all the code so I can only guess that the class House does not extend Property class.
    public class House extends Property
      // put the constructor here
    }If the House class does not extend Property (or any other class) it just extends (by default) the Object class, which does not have the constructor of Property class.
    Hope it helps
    Nick

  • Passing Optional Parameter Via Extended Class Constructor

    Following is a snippet of code I copied and have a question about when extending DataGridColumn class to sort numeric for colums that have numeric values:
    CustomAdvancedDataGridColumn(columnName:String=null,numeric:Object=null)
    super(columnName);
    initCompare(numeric);
    function initCompare(numeric:Object):void
    if (numeric == NUMERIC) {
    sortCompareFunction = numericCompare;
    The extended class is supposed to receive variable "numeric" type Object in the constructor which is then supposed to be used in the initCompare function to determine if a column contains numeric values.  This code didn't work for me as numeric variable remains null.  To get it working I added a new public static const and private propery "numeric" and obtained it with get() set() to see if should the column should sort numeric.  This works but you have to set the property in the extended datagrid column FLEX  tag.
    My question is how is the variable numeric in the code snippet above supposed to get it's new data for the initCompare function?  I can't get it to be anything other than null.
    Thanks for any insights...I'm new to FLEX.
    Jason

    Still searching for a solution.
    Please note, that I'm using the syntax described in
    <a href="http://help.sap.com/businessobject/product_guides/boexir31/en/xi3-1_url_reporting_opendocument_en.pdf">http://help.sap.com/businessobject/product_guides/boexir31/en/xi3-1_url_reporting_opendocument_en.pdf</a>
    on page 65.
    So did I get anything wrong? Help would be really appreciated, also Workarounds if there's no solution for the problem.

  • Constructor of derived-class has to call constructor  of super-class?

    In java, constructor of derived-class has to call constructor of super-class? there is no way to omit this step?

    Correct. If you do not explicitly call the constructor, a call to the no-arg c'tor, super(), is automatically inserted.
    It would be a mess to have it any other way. You'd be creating objects that are not completely initialized. They'd be in an invalid state.
    Constructor rules:
    1) Every class has at least one ctor.
    1.1) If you do not define an explicit constructor for your class, the compiler provides a implicit constructor that takes no args and simply calls super().
    1.2) If you do define one or more explicit constructors, regardless of whether they take args, then the compiler no longer provides the implicit no-arg ctor. In this case, you must explicitly define a public MyClass() {...} if you want one.
    1.3) Constructors are not inherited.
    2) The first statement in the body of any ctor is either a call to a superclass ctor super(...) or a call to another ctor of this class this(...) 2.1) If you do not explicitly put a call to super(...) or this(...) as the first statement in a ctor that you define, then the compiler implicitly inserts a call to super's no-arg ctor super() as the first call. The implicitly called ctor is always super's no-arg ctor, regardless of whether the currently running ctor takes args.
    2.2) There is always exactly one call to either super(...) or this(...) in each constructor, and it is always the first call. You can't put in more than one, and if you put one in, the compiler's implicitly provided one is removed.

  • Why the constructor of the base class calls first when u run the java app.

    why the constructor of the base class calls first when u run the java application

    For the record the other very exciting questions are:
    pls give the differences between application server and web server with examples
    will u pls narrate the differences between servlet context and servlet config.....
    where can we find servlet config...
    is there any methods to access servlet config

  • Why do we intialize other classes in constructor ????

    Please see the question below:
    class MThread extends Thread {
    private Abc mfact = null;
    private Xyz mo = null;
    private Pro sts = null;
    * Constructor.
    public MThread(Abc mfact, Xyz mo ) { *// do i have to pass Pro here from calling method so that i can initialize in constructor in order to use its method like record ???*
    this.mfact = mfact;
    this.mo = mo;
    public somemethod() {
    sts.record();
    public void somemethod1() {
    mo.create();
    ***************************************************Another Class******************************************************
    public class Xyz{
    // Some code here
    // this class calls Mthread and creates 10 such Threads sth like
    for (int i = 0; i < 10; i++) {
    mThreads[i] = new MThread(mfact, mo;
    ***********Another Class ****************
    public class Pro {
    // some code
    public synchronized record() {
    rat ++;
    Explanation :
    Xyz calls Mthread 10 times to create such threads.
    Mthread has method that class Pro for stats recording
    Mthread also uses other class files to do some functioning of its own.
    Question:
    Please see the question in the constructor of Mthread ??
    for using method like record in Pro. do i have to initialize that in the constructor of Mthread ??
    because other class like Abc initializes itself in the construtor??
    Why do we have to initialize some class in constructor ?? I don't get it ?? Also when i press F3 (Open declaration ) on record call in somemethod ()
    .. it properly opens the file of class Pro and points to my sychronized method in that class ??
    CONFUSED... Please help ..
    Thank you

    javanewbie83 wrote:
    To morgair:
    thats right..so actually my question was do i need to change the requiremensts of the constructor so i can pass in the value of class Pro from the calling method.
    Do i need to do that. is that compulsory to use one of its methods
    ThanksYes, somehow you have to get visibility to your object that you want to use. If it's not passed in, then you have to have it in some global context with reference to where you want to use it.
    class myClass{
      A a;
      B b;
      C c;
      myClass(A a, B b, C c){
        this.a = a;
        this.b = b;
        this.c = c;
      public void myMethod(){
        c.doSomething(a, b);
    // This can be done since a and b are supplied as arguments to the constructor
    // but also consider this:
    class myClass{
      A a;
      B b;
      C c;
      myClass(A a, B b){
        this.a = a;
        this.b = b;
        c = new C();
      public void myMethod(){
        c.doSomething(a, b);
    //this will also work but c is a local variable
    //also consider this:
    class myOuterClass{
      A a;
      B b;
      C c;
      myOuterClass(){
        a = new A();
        b = new B();
        c = new C();
        //do stuff
      public void someStuff(){ 
        myInnerClass p = new myInnerClass(a, b);
        p.myMethod();  //this will also work since c is defined in myOuterClass
      class myInnerClass{
        A a;
        B b;
        myInnerClass(A a, B b){
          this.a = a;
          this.b = b;
        public void myMethod(){
          c.doSomething(a, b);
    }Note: this example is supplied off the top of my head without being tried in my IDE, but should show the concepts even if my fat fingers have hit the wrong keys.

  • Can't get extended class to work with asbstract class

    I am having trouble working an extended class to work with my base abstract class. I keep getting this error message: "Fiction.java:4: invalid method declaration; return type required" public FictionBook()" Can someone give me some advice and or guidance on what I need to do? Thanks.
    Here is my abstract class:
    import javax.swing.*;
    public abstract class Book
         protected String bookTitle;
         protected double bookPrice;
         public abstract double setPrice();
    public Book()
              setBookPrice();
    public double getBookPrice()
              return bookPrice;
    public abstract void setBookPrice();
    Here is the extended class that I have:
    import javax.swing.*;
    public class Fiction extends Book
         public Fiction()
              super();
              setBookPrice();
         public void setBookPrice();
              bookPrice = 24.95;
         public String toString()
              return("Fiction Book Price is $" + bookPrice);
    }

    Fiction.java:2: Fiction is not abstract and does not override abstract method setPrice() in BookThis one is pretty straightfoward: Book declares an abstract setPrice() method. In effect is promises "every concrete subclass of Book will define an implementation of setPrice()". But your Fiction class does not do this - it does not give an implementation of setPrice() even though as a Book it is required to do so. That is what the compiler is complaining about.
    Fiction.java:6: call to super must be first statement in constructorThis one is slightly cryptic. If you use super() it must be as the first line of a constructor. You are using it as the first line of Fiction() so that looks OK - until you realise that Fiction() is not a constructor! That's because you declare it as a method returning void. Remove the "void" and the compiler will recognise it as a constructor and will be happy about your use of super().
    Edited by: pbrockway2 on Sep 13, 2008 12:13 PM
    Just a general point: it might be worth writing very brief comments for your abstract class to say what the methods are supposed to do. It isn't really clear what setBookPrice() is supposed to do given that it isn't passed any argument. Likewise setPrice(), how does it differ from setBookPrice()? what is the double value that it returns?

  • Inner classes can't access parent classes in constructor

    I'm having a problem where I have class A, which has an Inner class B, which has it's own inner class C. In C's constructor (the inner most class), i'm trying to access a method of A (the top most class), and I get a NullPointerException with trace:
    at mearns.finance.DefaultPortfolio.access$0(DefaultPortfolio.java:1)
    at mearns.finance.DefaultPortfolio$AccountsEditor$AccountsTableModel.<init>(DefaultPortfolio.java:253)
    In this case "DefaultPortfolio" is class A, AccountsEditor is class B, and AccountsTableModel is class C. The line given in the second stack trace element is the line in C's constructor which calls Class A's method.
    Debugging, I stop inside C's constructor. Before anything happens, debugger says this$1 is null. Then I step, and it calls super(), and now this$1 is an instance of class B (AccountEditor), but it's own this$1 (which should be an instance of class A) is still null.
    I'm calling C's constructor from within B's constructor (but not A's), not sure if that makes a difference.
    Can anyone explain what's going on here, and (hopefully) how I can work around it?
    Thanks for any help.
    When i debug

    hm, I really don't know what is happening but I want to tell you about something that is not nice in your code and possibly it could cause the error.
    Code behaves somwhat strange when you pass this out of a constructor. You do this implicitly when you create an inner classe which implicitly gets a reference to the outer class. Also just simple method calls can cause such effects.
    This is because the construction process it not finished but methods are already called.
    Even worse: the sub classes constructor possibly did not even start. Special to java is the fact that a method call can lead to an overridden method of a sub class who's constructors has not even passed the super() command.
    My guess now is that you have that some kind of this situation in your code. You create an inner class in a constructor. That inner class calls back a method on the outer class. Now say that the method you are calling is defined in a sub class who's constructor still stucks in super() call. There we are.
    I found a thread in a news group that covers exactly this problem:
    It is therefore a good idea only to call private methods from constructors (that should then also call only private methods). Also if inner classes are created in the constructor then they should not call any non trivial / non private methods of the outer class. Calling overridden methods out of constructors should be avoided strictly!
    Perhaps this has nothing to do with your problem. I cannot tell for sure.
    But this sounds quite interesting.
    Please tell me if my guess was right and if not post simple code the illustrated your problem.
    Here a simple example also throwing NullPointerException:
    class Outer {
      int i = 42;
      abstract class InnerSuper {
        InnerSuper() {
          foo();
        abstract void foo();
      class InnerSub extends InnerSuper {
        void foo() {
          System.out.println(i);
      public void bar() {
        new InnerSub();
      public static void main(String[] args) {
        Outer o = new Outer();
        o.bar();
    } It causes a NullPointerException because the InnerSub constructor did not run. I copied the example from a news group thread i found.
    http://groups.google.de/group/comp.lang.java.programmer/browse_thread/thread/897fba792d689b29/a1ba2ed708636a30?q=inner+class+outer+this+reference+NullPointerException&rnum=4&hl=de#a1ba2ed708636a30
    Here is a even simpler example of strange behavior - even without NullPointerExceptions.
    class A {
         A() {
              System.out.println(getName());
         String getName() {
              return "A";
    class B extends A {
         String NAME = "B";
         String getName() {
              return NAME;
    new B();It will output null instead of B.
    regards
    Sven

  • Abstract classes and Constructors

    I am wiondering how can an Abstract class have a constructor?
    Won't the constructor of the derived class
    automatically invoke the constructor of Shape
    by calling super()implicitly
    That means that an object of type Shape has been created
    Or have I overlooked a certain point?
    abstract class Shape {
         public String color;
         public Shape() {
         public void setColor(String c) {
              color = c;
         public String getColor() {
              return color;
         abstract public double area();
    public class Point extends Shape {
         static int x, y;
            // ?? Wont this constructor invoke the super class's constructor?
         public Point() {
              x = 0;
              y = 0;
         public double area() {
              return 0;
         public static void print() {
              System.out.println("point: " + x + "," + y);
         public static void main(String args[]) {
              Point p = new Point();
              p.print();
    }

    bhuru_luthria wrote:
    I am wiondering how can an Abstract class have a constructor?
    Won't the constructor of the derived class
    automatically invoke the constructor of Shape
    by calling super()implicitly If you don't explicitly invoke a superclass c'tor, super() will be called, but you can also explicitly invoke any non-private parent constructor from the child's constructor.
    That means that an object of type Shape has been createdC'tors don't create objects. They initialize newly created objects to valid state.

  • Static nonstatic class object constructor

    I was wonderring what is the use of non static constructors??
    we all know about static constructors, they are used for initializing the class.
    we all know about constructos, they are used for initializing an object from a given class.
    what I dont know is the use of non static constructors such as this
    class A{
         static{
              System.out.println ("Class A Static Constructor");
              /*What is the use of this???????
               *why dont we put this inside the constructor??
              System.out.println ("Class A NON static constructor");
         A(){
              System.out.println ("Class A Constructor");
    class B extends A{
         static{
              System.out.println ("Class B static constructor");
              System.out.println ("Class B NON static Constructor");
         B(){
              System.out.println ("Class B Constructor");
    public class Test{
         public static void main(String[]args){
              new B();
              new B();
    }I would appreciate understaind this!! I can only see that if there was no other constructor, it can be used instead of the default constructor() with no arguments,
    any clarification?

    They are called static and non static intializer.
    The non static initializer was introduced in the language subsequently with inner classes.
    It's used the give an anonymous inner class a feature that behaves like a constructor (though with no args).
    It's useless for other kinds of class.
    abstract class A{
         A(){
              System.out.println("A constructor");
         abstract void exec();
    class B{
         static A getA(){
              return new A(){
                             System.out.println("the cool implementation");
                        void exec(){
                             System.out.println("exec()");
         public static void main( String[] args){
              A a = B.getA();
              a.exec();
    }Cut and paste in a new text file, call it B.java, then javac B.java, and java B.

  • References when extending class

    I have a general question about extending a class.
    If I have
    public class B extends A
    does Java create a reference to A and B?
    Imagine I call a method of A with super from a method of B, this method is not static, so I must have a reference, I think.
    Thanks Caroline

    If a class B is a subclass of A, the class A is instantiated when B is instantiated.
    class A{
      A(){;}// default constructor of A
    class B extends A{ // default constructor of B
      B(){
          super();// A is instantiated
    }(The reference to B already refers to A.)

Maybe you are looking for

  • Adobe Cloud Problems

    I tried to join/sign up for Adobe Cloud online and it is still giving me a "please wait" message and it has been over 12 hours. I don't want to refresh or leave the page in case it messes it up. Does it normally take this long to process??

  • Windows 7 professional - one or more audio services are not running

    I have a windows 7 professional laptop. The audio stopped working suddenly. When i click on the audio icon (with a red x on it) the system tried to troubleshoot the problem. This is the error i see in the troubleshooter. One or more audio services is

  • LeapFrog Connect quits unexpectedly on MacBook Pro running OS X 10.9.1

    We have owned a LeapPad 2 for nearly a year now. LeapFrog Connect worked fine on my original MacBook Pro running Mountain Lion. However, when trying to open on my new MacBook Pro running OS X 10.9.1 I continued to get an error message as below: Nothi

  • Transaction MIBC-- ABC Analysis for Cycle Counting - Physical Inventory

    Dear Friends, Could you please explain me the cycle count indicator relationship to the percentage of inventory to be counted. When i am using MIBC transaction and changing the Percentages....based on percentages the system is proposing the new cycle

  • Very urgent urgent plz somebody help me to this question..

    hai plz somebody reply me? I have created materialized view for my report. but i cant seem them used in sql inspector tab.its directly querried from tables.. but i want to use materialized view in my report to enhance theperformance..plz help me.. i