Static method overriding in Java [duplicate] - java

This question already has answers here:
Why doesn't Java allow overriding of static methods?
(22 answers)
Is it possible to override a static method in derived class?
(6 answers)
Closed 5 years ago.
class B extends A {
static public void printMe(){
System.out.println("in static B");
}
}
class A{
static public void printMe(){
System.out.println("In static A");
}
}
public static void main(String[] args) {
A a = new B();
a.printMe();
}
Why is the output "In static A" ?

Static members bind to type rather than implemented type. Hence you see the methods executing from class A.
And static members are not to be ovverriden and they share same copy regardless of instance state.
If you need methods to be ovveriden, do not use them as static members.

Static member or method belongs to class level instead of specific instance.
A static class will have only 1 instance even if you create multiple instance or do not create instance.
In your case, since you have created instance of class A, method inside class A is implemented.
Another way to get a clear concise for the problem scenario is try running the code mentioned below:
public static void main(String[] args) {
A.printMe();
}
You will get clear idea.

Related

Use of non static method in Java [duplicate]

This question already has answers here:
Difference between Static methods and Instance methods
(10 answers)
Closed 4 years ago.
I want to know, what is the use of the non-static method. My understanding is that static methods can be called directly as well as by the object of the class while nonstatic methods can only be called by an object of the class.
class Ideone
{
public static void print()
{
System.out.println("print");
}
public static void main (String[] args) throws java.lang.Exception
{
Ideone id = new Ideone();
id.print();
print();
}
}
The above method can be called directly as well as by an object of class. So, when should I have a non static method?
In real-world applications objects interacts with other objects and generally have one starting point say main method in some java application.
You CAN NOT invoke other objects nonstatic methods without creating them.

Java static methods vs overriding [duplicate]

This question already has answers here:
Why doesn't Java allow overriding of static methods?
(22 answers)
If static methods can't be overridden, how its working here (For Java)?
(3 answers)
Why doesn't the compiler complain when I try to override a static method?
(9 answers)
Closed 4 years ago.
Trying to work on an example from a book on method overriding.
The code has two classes Veggies and Pumpkin.The only confusion i have is if the object of pumpkin is assigned to the myveggie object, why does it call the method of veggies class since the object is from derived class.
I am sure this has something to do with static method,but I could get a more clear idea.
class Veggies {
public static void staticMethod(){
System.out.println("Veggies static method");
}
public void instancemethod(){
System.out.println("Veggies instance method");
}
}
public class Pumpkin extends Veggies{
public static void staticMethod(){
System.out.println("Pumpkin static method");
}
#Override
public void instancemethod(){
System.out.println("Pumpkin instance method");
}
public static void main(String[] args) {
Pumpkin myPumpkin=new Pumpkin();
Veggies myveggie=myPumpkin;
myveggie.staticMethod();
myveggie.instancemethod();
}
}
As this question:
Why doesn't Java allow overriding of static methods?
explains, static methods cannot be overridden in Java.
What you have in your example, is code that is calling a static method via an instance. This is bad practice.
What actually happens is that the static type of the variable (not the reference!) is resolved at compile time to a class. In this case, the class is Veggies. Then the compiler inserts a call to the static method of that class; i.e. Veggies.staticMethod().
Which is confusing ... because it looks like you should be dispatching to a static method associated with the reference. But that is not how Java works.
That's why this is bad practice, and why a lot of IDEs will warn you about it.

Static methods in Interfaces in Java [duplicate]

This question already has answers here:
What is the difference between static and default methods in a Java interface?
(12 answers)
Closed 5 years ago.
interface TestInterface
{
public static void square(int a)
{
System.out.println("Square is "+a*a);
}
public static void show()
{
System.out.println("Default Method Executed");
}
}
class TestClass implements TestInterface
{
public void square(int a)
{
System.out.println(a*a);
}
public void show()
{
System.out.println("Overridden Method");
}
public static void main(String args[])
{
TestClass d=new TestClass();
d.square(4);
TestInterface.square(4);
TestInterface.show();
d.show();
}
}
I have a doubt in my code. I learnt that static methods cannot be overridden in JAVA, but it seems to be working fine here.
When i give both default and static keywords together, like this
interface TestInterface
{
default static void square(int a)
{
System.out.println("Square is "+a*a);
}
public static void show()
{
System.out.println("Default Method Executed");
}
}
An error crops up as follows:
illegal combination of modifiers: static and default
What is the reason for JAVA treating this as an error?
A static method is meant to be called without an instance of the class/interface concerned. Usually they are meant to be utility methods.
A default method is meant to be called on an instance of the interface concerned. All implementations of this interface will have this method definition, unless it is overridden.
The reason these two terms are not allowed together is simply because they contradict each other: default requires an object, static requires no object.
TestClass.show() and TestClass.square() are not static and therefore do not override the static methods in the interface. They are member methods and require an object to call them. On the other hand, the methods with the same name in the interface are static and so you can call them with the interface name or class name without an object.

Why is it said that static methods cannot be inherited? [duplicate]

This question already has answers here:
Are static methods inherited in Java?
(15 answers)
Closed 8 years ago.
I was able to run the following code:
class A
{
public static void display()
{
System.out.println("Inside static method of superclass");
}
}
class B extends A
{
public void show()
{
display();
}
}
public class staticMethodInheritance {
public static void main(String[] args) {
B b = new B();
b.display();
}
}
Now I was able to access the method display() from the instance of the class B then why is it said that static methods cannot be inherited. If I declare a method display in class B then it is said that the method in the superclass is hidden and the method in the child class is called then again isnt this the behavior that is desired when we override a method.
The only difference with inherited static (class) methods and inherited non-static (instance) methods is that when you write a new static method with the same signature, the old static method is just hidden, not overridden.
Static methods are inherited but cannot be overriden they can be re- defined.

Java:Overriding a static function [duplicate]

This question already has answers here:
Static methods and their overriding
(5 answers)
Closed 8 years ago.
What should be printed when we execute this code?
I picked the question from here where the answer is provided but I kinda believe is wrong. First the call to a static function has to be done in static way, second when we override a static function the previous one is no longer accessible ( no new memory is assigned)
class Base {
public static void show() {
System.out.println("Base::show() called");
}
}
class Derived extends Base {
public static void show() {
System.out.println("Derived::show() called");
}
}
class Main {
public static void main(String[] args) {
Base b = new Derived();;
b.show();
}
}
static method belongs to class itself and overriding works for instance methods only. If you define the same method again in sub-class then it's called re-defining hiding of the static method.
static method looks for class to invoke it and that can be verified by below same code:
Base b = null;
b.show(); // Base::show() called
It doesn't make any sense to call static method via object.

Categories

Resources