Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #8141

Re: super

From Lew <lewbloch@gmail.com>
Newsgroups comp.lang.java.programmer
Subject Re: super
Date 2011-09-18 13:16 -0700
Organization http://groups.google.com
Message-ID <20064407.800.1316376999124.JavaMail.geo-discussion-forums@prdy8> (permalink)
References <3e87dcf3-6842-41bf-8eb8-0c4181a178a9@k1g2000vbz.googlegroups.com> <j55ad2$o2g$1@dont-email.me> <slrnj7cdtu.6gl.avl@gamma.logic.tuwien.ac.at> <797b5b56-9855-4ff1-a1e9-1eef2dcef7a8@d12g2000vba.googlegroups.com> <slrnj7cio8.6gl.avl@gamma.logic.tuwien.ac.at>

Show all headers | View raw


Andreas Leitgeb wrote:
> giuseppe.on.usenet wrote:
>> Andreas Leitgeb wrote:
>>> I think the misunderstanding is far more basic.
>>> To giuseppe:
>>> In dir2.GrandChild's main, just remove the line, where you instantiate
>>> Child, and leave the rest exactly as is.  Recompile & run it.  You'll
>>> see that instantiating class Child (or not doing it) doesn't change
>>> anything. What does this tell you?
>>
>> I am not the author :) I found that code in a certification study
>> guide (the original question was: What will the output be?).
> 
> That doesn't really matter.  Obviously you didn't "guess" (or know)
> the answer (or you wouldn't have asked here).  If you are still
> surprised by "super.var" and "var" being the same value, then
> I advise you to still make the experiments I suggested.
> 
>> Maybe
>> they instantiated the Child object just to try to confuse the reader.
> 
> Not primarily to confuse him, but rather to test his confusability ;-)

Andreas is completely correct, giuseppe.  It's a test question, so of course they will include some irrelevant information ("red herrings") to see if you really know what you're doing.

It is completely unnecessary to use a compiler to answer the question once you understand the principles.  Andreas's advice to use a compiler is to help you achieve that understanding.  He did not suggest you use a compiler during the test, but during your study.  Of course you are allowed to use a compiler when you are studying.

Unlike member methods, member variables do not override inherited variables.  It is rarely if ever necessary, and I would say never desirable to refer to a variable via the 'super.' notation.  If the variable is inherited, then 'super.variable' is exactly the same as 'this.variable'; both syntaxes refer to the same variable.  If a variable in the child class has the same name as an inherited variable from an ancestor class, then you got problems.  It is not good to name the member variable the same as an inherited member variable; the child variable "hides" the ancestor variable.
<http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.3>

So in the problem you showed us, the line 

   protected int var = 1;

declares and initializes a member variable that is inherited by descendant classes.  ('protected' means the variable is accessible to child types and to types in the same package.)

So in the 'GrandChild' class, the 'main()' method:

 public static void main(String[] args) {
   GrandChild gc = new GrandChild();
   gc.var = 2;
   Child c = new Child();
   gc.test2();
 }

'gc.test2()' and 'gc.var' refer to the same exact 'var' as 'super.var' because there is no difference between 'this.var' and 'super.var' inside 'GrandChild'.

Notice that the 'Child' declaration, 'Child c = new Child();', creates an unreferenced variable 'c'.  Nothing uses 'c' - it's just allocated and garbage collected.  The JVM very likely will not even allocate that object in any run of the program.

-- 
Lew

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Find similar


Thread

super "giuseppe.on.usenet" <giuseppe.on.usenet@gmail.com> - 2011-09-18 09:53 -0700
  Re: super Joshua Cranmer <Pidgeot18@verizon.invalid> - 2011-09-18 12:39 -0500
    Re: super Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2011-09-18 18:26 +0000
      Re: super Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2011-09-18 18:29 +0000
      Re: super "giuseppe.on.usenet" <giuseppe.on.usenet@gmail.com> - 2011-09-18 12:21 -0700
        Re: super Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2011-09-18 19:48 +0000
          Re: super Lew <lewbloch@gmail.com> - 2011-09-18 13:16 -0700

csiph-web