• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

static methods

 
wei liu
Ranch Hand
Posts: 56
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
B) Static methods can be overridden by static methods only.
is it right?
 
Maulin Vasavada
Ranch Hand
Posts: 1873
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
no. static methods are not overriden. they are hidden by the child class.
e.g.
class a {
static void m() {
S.o.p("in a.m()");
}
}
class b extends a {
static void m() {
S.o.p("in b.m()");
}
void n() { m(); }
}
class test {
static void main(String[] s) {

b b1 = new b();
b1.n(); // result is "in b.m()" and not "in a.m()"
// still u can access a's m() thru a.m() or
// super.m() in class b
}
}
regards
maulin
 
mark stone
Ranch Hand
Posts: 417
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
yes you are right that static methods can only override static method.
Put simply, a non-static method in a subclass cannot override a static method in a superclass.
the compiler shall give you a error message saying that this is illegal.
Originally posted by wei liu:
B) Static methods can be overridden by static methods only.
is it right?

 
power jxz
Greenhorn
Posts: 3
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Static methods may not be overridden to be non-static.
Non-static methods may not be overridden to be static.
Actually, static methods are not participating in the usual overriding mechanism of invoking the
methods based on the class of the object at runtime. Static method binding is done at compile time, so
the method to be invoked is determined by the type of reference variable rather than the actual type of
the object it holds at runtime.
public class StaticOverridingTest {
public static void main(String s[]) {
Child c = new Child();
c.doStuff(); // This will invoke Child.doStuff()
Parent p = new Parent();
p.doStuff(); // This will invoke Parent.doStuff()
p = c;
p.doStuff(); // This will invoke Parent.doStuff(), rather than Child.doStuff()
}
}
class Parent {
static int x = 100;
public static void doStuff() {
System.out.println("In Parent..doStuff");
System.out.println(x);
}
}
class Child extends Parent {
static int x = 200;
public static void doStuff() {
System.out.println("In Child..doStuff");
System.out.println(x);
}
}
above from Chairyuan_note!!!
 
wei liu
Ranch Hand
Posts: 56
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
so the above statement is correct! right?
Originally posted by power jxz:
Static methods may not be overridden to be non-static.
Non-static methods may not be overridden to be static.
Actually, static methods are not participating in the usual overriding mechanism of invoking the
methods based on the class of the object at runtime. Static method binding is done at compile time, so
the method to be invoked is determined by the type of reference variable rather than the actual type of
the object it holds at runtime.
public class StaticOverridingTest {
public static void main(String s[]) {
Child c = new Child();
c.doStuff(); // This will invoke Child.doStuff()
Parent p = new Parent();
p.doStuff(); // This will invoke Parent.doStuff()
p = c;
p.doStuff(); // This will invoke Parent.doStuff(), rather than Child.doStuff()
}
}
class Parent {
static int x = 100;
public static void doStuff() {
System.out.println("In Parent..doStuff");
System.out.println(x);
}
}
class Child extends Parent {
static int x = 200;
public static void doStuff() {
System.out.println("In Child..doStuff");
System.out.println(x);
}
}
above from Chairyuan_note!!!

 
power jxz
Greenhorn
Posts: 3
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
yes! yours is correct!
Originally posted by wei liu:
so the above statement is correct! right?

 
mark stone
Ranch Hand
Posts: 417
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
"Static methods may not be overridden to be non-static.
Non-static methods may not be overridden to be static."
can the list please confirm that what this means is that a static method can override another static method. And a non-static method can override non-static method.
overriding amongst static and non-static does not make sense or is illegal or basically not permitted by the language rules.
thanks
mark
Originally posted by power jxz:
Static methods may not be overridden to be non-static.
Non-static methods may not be overridden to be static.
Actually, static methods are not participating in the usual overriding mechanism of invoking the
methods based on the class of the object at runtime. Static method binding is done at compile time, so
the method to be invoked is determined by the type of reference variable rather than the actual type of
the object it holds at runtime.
public class StaticOverridingTest {
public static void main(String s[]) {
Child c = new Child();
c.doStuff(); // This will invoke Child.doStuff()
Parent p = new Parent();
p.doStuff(); // This will invoke Parent.doStuff()
p = c;
p.doStuff(); // This will invoke Parent.doStuff(), rather than Child.doStuff()
}
}
class Parent {
static int x = 100;
public static void doStuff() {
System.out.println("In Parent..doStuff");
System.out.println(x);
}
}
class Child extends Parent {
static int x = 200;
public static void doStuff() {
System.out.println("In Child..doStuff");
System.out.println(x);
}
}
above from Chairyuan_note!!!

 
Jane Griscti
Ranch Hand
Posts: 3141
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi guys,
'static' methods CANNOT BE OVERRIDDEN! They belong to the class; overriding only applies to instances of a class or objects.

8.4.6.2 Hiding (by Class Methods)
If a class declares a static method, then the declaration of that method is said to hide any and all methods with the
same signature in the superclasses and superinterfaces of the class that would otherwise be accessible to code in the
class. A compile-time error occurs if a static method hides an instance method.

Please see this Sun Tech Tip which explains shadowing, hiding and overriding.
Hope that helps.
------------------
Jane Griscti
Sun Certified Programmer for the Java� 2 Platform
Co-author Mike Meyers' Java 2 Certification Passport
[This message has been edited by Jane Griscti (edited December 29, 2001).]
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic