We can access the Super Class methods which consists of operations on private data members and print the results.But why can’t I print the private data members of Super Class with the SubClass object calling them in my main function? Someone please explain me.
Here is the example below.
class SuperClass1
{
private int a;
private int b;
SuperClass1(int p,int q)
{
a=p;
b=q;
}
SuperClass1(SuperClass1 obj)
{
a=obj.a;
b=obj.b;
}
SuperClass1()
{
a=-1;
b=-1;
}
int Vol()
{
return a*b;
}
}
class SubClass1 extends SuperClass1
{
int c;
SubClass1(int p,int q,int r)
{
super(p,q);
c=r;
}
SubClass1(SubClass1 obj)
{
super(obj);
c=obj.c;
}
SubClass1()
{
super();
c=-1;
}
}
public class Super
{
public static void main(String[] args)
{
SubClass1 obj1=new SubClass1();
//System.out.println("The values of obj1 are:"+obj1.a+""+obj1.b+""+obj1.c);
int vol=obj1.Vol();
System.out.println("The volume is :"+vol);
}
}
security and encapsulation
The superclass is letting its subclasses use only the public and protected methods/fields.
This allows the designer of the superclass to change the implementation of these methods if he sees it better, without breaking the subclass’s correctness.
A text book example is a complex number class.
The programmer using this class only needs its functionality, he doesn’t care if the implementation is with
imaginaryandrealfields or withradiusandthetafields [two distinct ways to represent complex number].It allows the designer of the
ComplexNumberclass more freedom if he wants to change the class in later versions, and it also allows the user less worries: he doesn’t need to take care for all the details, some are being taken care of for him.Bonus: note you can break this behavior and access private fields and methods by using reflection – but when you do so – all bets are off, and you do it on your own responsibility.