Roman A. Taycher
Roman A. Taycher

Reputation: 19477

Class Methods Inheritance

I was told that static methods in java didn't have Inheritance but when I try the following test

package test1;

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        TB.ttt();
        TB.ttt2();
    }

}

package test1;

public class TA {
static public Boolean ttt()
{
    System.out.println("TestInheritenceA");
    return true;
}
static public String test ="ClassA";
}

package test1;

public class TB extends TA{
static public void ttt2(){
    System.out.println(test);
    }
}

it printed :

TestInheritenceA ClassA

so do java static methods (and fields) have inheritance (if you try to call a class method does it go along the inheritance chain looking for class methods). Was this ever not the case? And are there any inheritance OO languages that are messed up like that for class methods?


So apparently static methods are inherited but can't be overidden, so does c# share that problem? Do any other Languages?

Upvotes: 3

Views: 217

Answers (3)

Sid
Sid

Reputation: 4997

That's the meaning of static. It means per class. Static fields and methods are shared among instances. If you change a static value, it's reflected across instances.

Upvotes: 0

Oak
Oak

Reputation: 26868

In Java, fields and static methods are inherited, but cannot be overridden - I believe that is what whoever told you that "they are not inherited" meant.

Non-private, non-static methods are inherited and can be overridden.

Upvotes: 5

ZeissS
ZeissS

Reputation: 12135

This was always the case, but you cannot override class methods:

class A {
  public static void a() { system.out.println("A"); }
}

class B {
  public static void a() { system.out.println("B"); }
}

A a = new A();
a.a(); // "A"

B b = new B();
b.a() // "B"

a = b;
a.a(); // "A"

Upvotes: 3

Related Questions