+ 1
Access variables from super super classes
Class two Class one extends two Class three extends one In class three, is it possible to access class one’s protected variable? I know that I can access class one’s variable from three via super.
11 Answers
+ 2
@Ipang ya, I know. lol just don't like to keep a bunch of public codes for others questions in my profile. It did fit, but I added to it and then deleted the added part without re-pasting the whole code before I closed it out and deleted it. Oh well.
@Morgan
Basically when you extend a class, everything within the super class that is not private becomes a part of the definition of that subclass, including everything that the super class has inherited itself. It's kind of as if it is copied into the class just like you wrote it. In order to access private members of a superclass, you would need to create a method with the appropriate access modifier (public/protected/default(none)). See the classes in my example. If you create a variable within the new subclass that has the exact same name (case sensitive) as one from a super class, it will shadow the variable from the super class. If you create a method with the exact same signature as a non-static method from a super class it will override that method. If static you will shadow it. You can use the super keyword to access a method of the super class that has one of the same name in the sub class. Likewise, you can use super keyword to access the constructor of the super class.
EDIT:
@Ipang @Morgan
There now the code is all there added in 3 parts. lol
+ 4
@ChaoticDawg link your code instead to escape character limit for answers :)
+ 4
@ChaoticDawg, okay, satisfactory answer, guess both @Morgan and me can take that for a lesson for the day... Thanks ^_^
+ 3
@ChaoticDawg, thanks for noticing, I suppose the "getup" method was meant getpv? also in class three, if I do getpv(int newpv) to overload it instead of override, would it be right and works?
+ 2
Inheritance test, correct me if I'm wrong :)
https://code.sololearn.com/czEG05Q9sZey/?ref=app
+ 2
This may help:
// Part 1
class Two {
int defTwo = 2;
private int privTwo = 2;
public int pubTwo = 2;
protected int proTwo = 2;
int getPrivTwo() {
return privTwo;
}
void setPrivTwo(int privTwo) {
this.privTwo = privTwo;
}
}
class One extends Two {
int defOne = 1;
private int privOne = 1;
public int pubOne = 1;
protected int proOne = 1;
public int getPrivOne() {
return privOne;
}
public void setPrivOne(int privOne) {
this.privOne = privOne;
}
}
class Three extends One {
int defThree = 3;
private int privThree = 3;
public int pubThree = 3;
protected int proThree = 3;
public int getPrivThree() {
return privThree;
}
public void setPrivThree(int privThree) {
this.privThree = privThree;
}
}
Continued....
+ 1
@ Ipang you don't need the getpv method in class Three as it is inherited from class Two and they match. You are effectively overriding it with a match of itself. Other than that it looks correct.
You actually don't even need the method as you can access the variable directly too.
+ 1
LOL, I'm just realizing my code got cut off when I pasted it in.
+ 1
@Ipang yup, stupid autocorrect. It's fixed now!
+ 1
// Part 3. Bottom of Program class...
// You cannot access private variables that are
// inherited from a super class directly through
// the object of a child class
// System.out.println(three.privOne); // No Error
// three.privOne = 4; // No Error
// System.out.println(three.privOne); // No Error
// System.out.println(three.privTwo); // No Error
// three.privTwo = 5; // No Error
// System.out.println(three.privTwo); // No Error
// You can, however access private variables
// that are inherited from a super class via
// public/protected/default level access modified
// getter and setter methods
System.out.println(three.getPrivOne());
three.setPrivOne(4);
System.out.println(three.getPrivOne());
System.out.println(three.getPrivTwo());
three.setPrivTwo(5);
System.out.println(three.getPrivTwo());
}
}
+ 1
// Part 2. Top of Program class
public class Program
{
public static void main(String[] args) {
Three three = new Three();
// You can access default/package variables that are
// inherited from a super class directly through
// the object of a child class
System.out.println(three.defOne); // Yes
three.defOne = 4; // Yes
System.out.println(three.defOne); // Yes
System.out.println(three.defTwo); // Yes
three.defTwo = 5; // Yes
System.out.println(three.defTwo); // Yes
// You can access public variables that are
// inherited from a super class directly through
// the object of a child class
System.out.println(three.pubOne); // Yes
three.pubOne = 4; // Yes
System.out.println(three.pubOne); // Yes
System.out.println(three.pubTwo); // Yes
three.pubTwo = 5; // Yes
System.out.println(three.pubTwo); // Yes
// You can access protected variables that are
// inherited from a super class directly through
// the object of a child class
System.out.println(three.proOne); // Yes
three.proOne = 4; // Yes
System.out.println(three.proOne); // Yes
System.out.println(three.proTwo); // Yes
three.proTwo = 5; // Yes
System.out.println(three.proTwo); // Yes
// Contiued....