The class member attributes (fields) and methods are bounded with some accessibility modifier, which defines the access scope of the member. In this section, we’ll study how to access the data members (attributes) of the class.
All the public and protected members of the parent of subclass always inherit, doesn’t matter what package the subclass is in.
- Just like any other fields of the subclass, the inherited fields can be used.
- If you declare a field in the subclass, with the same name as in superclass, then the subclass field will hide the superclass inherited filed.
- The inherited method can be used as same as the subclass method are used.
- You can define a new instance method in the subclass, that has the same signature as one of the superclass method, called overriding.
- You can define a new static method (class member) for the subclass, that has the same signature as one of the superclass method, called hiding.
- The subclass constructor invokes the superclass constructor either implicitly if the superclass constructor is default or by using the keyword super.
The attributes can be with any access modifier like private, protected, public, and default. There is fixed scope of accessibility or extendibility of the attribute in subclass. The attributes will be inherited or not, it totally depends on its access modifier. There are four access modifiers as follows with its scope:
- 1.private: never inherit
- 2.protected: only in its subclass
- 3. public : inherit
- 4.default: inherit
Example:
//Create a superclass
class SuperClass
{
private int a;
protected int b;
public int c;
int d;
public void storeab()
{
a = 41;
b = 41;
c = 41;
d = 41;
}
public void showab()
{
System.out.println(“SuperClass contents :: a = “+a+” b “+b+” c “+c+” d = “+d);
}
}
//Create a sub class by extending class SuperClass
class SubClass extends SuperClass
{
int s;
public void sumab()
{
s=a+b+c+d;
s = b+c+d;
}
public void shows()
{
System.out.println(“SubClass contents:: s = “+s);
}
}
public class SingleInheritanceDemo
{
public static void main(String arg[])
{
SubClass ob = new SubClass();
ob.storeab();
ob.sumab ();
ob.showab ();
ob.shows();
} }
When you compile this code you’ll find the following message:
But if you want the value of attribute ‘a’ in subclass then either implement a method that returns its value or define it as default or public. The modified version of the program is given below with definition of a method that returns the value of attribute ‘a’ of SuperClass.
//Create a superclass
class SuperClass
{
private int a;
protected int b;
public int c;
int d;
public void storeab()
{
a = 41;
b = 41;
c = 41;
d = 41;
}
public void showab()
{
System.out.println(“SuperClass contents :: a = “+a+” b “+b+” c “+c+” d = “+d);
}
public int geta()
{
return a;
}
}
//Create a sub class by extending class SuperClass
class SubClass extends SuperClass
{
int s;
public void sumab()
{
s=a+b+c+d;
s = b+c+d;
}
public void shows()
{
System.out.println(“SubClass contents:: s = “+s);
}
}
public class SingleInheritanceDemo
{
public static void main(String arg[])
{
SubClass ob = new SubClass();
ob.storeab();
ob.sumab ();
ob.showab ();
ob.shows();
} }
The protected, public and default field ‘b’, ‘c’ and ‘d’ are inherited in subclass .