Warrior
Warrior

Reputation: 39374

Overriding a super class's instance variables

Why are we not able to override an instance variable of a super class in a subclass?

Upvotes: 30

Views: 50728

Answers (9)

ssi-anik
ssi-anik

Reputation: 3694

class Dad{
    public String name = "Dad";
}
class Son extends Dad{
    public String name = "Son";
    public String getName(){
        return this.name;
    }
}

From main() method if you call

new Son().getName();

will return "Son" This is how you can override the variable of super class.

Upvotes: 3

Adrian Zanescu
Adrian Zanescu

Reputation: 8008

Because you can only override behavior and not structure. Structure is set in stone once an object has been created and memory has been allocated for it. Of course this is usually true in statically typed languages.

Upvotes: 11

dheeraj
dheeraj

Reputation: 1

we can not overriding structure of instance variables ,but we ovverride their behavior:-

class A
{
int x = 5;
}

class B extends A
{
int x = 7:
}

class Main
{
public static void main(String dh[])
{
A obj = new B();
System.out.println(obj.x);
}
}

in this case output is 5.

Upvotes: 0

Pierre D
Pierre D

Reputation: 26211

He perhaps meant to try and override the value used to initialize the variable. For example,

Instead of this (which is illegal)

public abstract class A {
    String help = "**no help defined -- somebody should change that***";
    // ...
}
// ...
public class B extends A {
    // ILLEGAL
    @Override
    String help = "some fancy help message for B";
    // ...
}

One should do

public abstract class A {
    public String getHelp() {
        return "**no help defined -- somebody should change that***";
    }
    // ...
}
// ...
public class B extends A {
    @Override
    public String getHelp() {
        return "some fancy help message for B";
    // ...
}

Upvotes: 50

mahanuz
mahanuz

Reputation:

you can override a method,that is all right but what do you mean by overriding a variable? if you want to use a variable at any other place rather than super class u can use super. as in super(variable names); why do you want to override a variable? i mean is there any need?

Upvotes: 0

Toon Krijthe
Toon Krijthe

Reputation: 53366

If you have the need to override an instance variable, you are almost certainly inheriting from the worng class.

In some languages you can hide the instance variable by supplying a new one:

class A has variable V1 of type X;

class B inherits from A, but reintroduces V1 of type Y.

The methods of class A can still access the original V1. The methods of class B can access the new V1. And if they want to access the original, they can cast themself to class A (As you see dirty programming provokes more dirty progrtamming).

The best solution is to find another name for the variable.

Upvotes: 0

Markus Lausberg
Markus Lausberg

Reputation: 12257

Do you mean with overriding you want to change the datatype for example?

What do you do with this expression

public class A {
   protected int mIndex;

   public void counter(){
      mIndex++;
   }

}

public class B extends A {
   protected String mIndex; // Or what you mean with overloading
}

How do you want to change the mIndex++ expression without operator overloading or something like this.

Upvotes: 0

Jon Skeet
Jon Skeet

Reputation: 1500275

Variables aren't accessed polymorphically. What would you want to do with this that you can't do with a protected variable? (Not that I encourage using non-private mutable variables at all, personally.)

Upvotes: 5

cletus
cletus

Reputation: 625047

Because if you changed the implementation of a data member it would quite possibly break the superclass (imagine changing a superclass's data member from a float to a String).

Upvotes: 21

Related Questions