Print

Print


I did misspeak a bit.  You can override static methods in Java.  My major
issue is that there is no "getClass()" within a static method, so when the
static method is being run in the context of the inheriting class it is
unaware of its own run context.

For example: I want the output to be "Hi from bar", but it's "Hi from foo":

class Foo {
  public static void sayHello() {
    hi();
  }
  public static void hi() {
    System.out.println("Hi from foo");
  }
}

class Bar extends Foo {

  public static void hi() {
    System.out.println("Hi from bar");
  }
}

class Test {
  public static void main(String [ ] args) {
    Bar.sayHello();
  }
}


-Justin



On Thu, Feb 21, 2013 at 11:18 AM, Eric Hellman <[log in to unmask]> wrote:

> OK, pedant, tell us why you think methods that can be over-ridden are
> static.
> Also, tell us why you think classes in Java are not instances of
> java.lang.Class
>
>
> On Feb 18, 2013, at 1:39 PM, Justin Coyne <[log in to unmask]>
> wrote:
>
> > To be pedantic, Ruby and JavaScript are more Object Oriented than Java
> > because they don't have primitives and (in Ruby's case) because classes
> are
> > themselves objects.   Unlike Java, both Python and Ruby can properly
> > override of static methods on sub-classes. The Java language made many
> > compromises as it was designed as a bridge to Object Oriented programming
> > for programmers who were used to writing C and C++.
> >
> > -Justin
> >
>