Overriding And Overloading(Java Program ) Questions and Answers
Question 1. What will be printed after executing following program code?
class Base{
int value = 0;
Base(){
addValue();
}
void addValue(){
value += 10;
}
int getValue(){
return value;
}
}
class Derived extends Base{
Derived(){
addValue();
}
void addValue(){
value += 20;
}
}
public class Test{
public static void main(String[] args){
Base b = new Derived();
System.out.println(b.getValue());
}
}
class Base{
int value = 0;
Base(){
addValue();
}
void addValue(){
value += 10;
}
int getValue(){
return value;
}
}
class Derived extends Base{
Derived(){
addValue();
}
void addValue(){
value += 20;
}
}
public class Test{
public static void main(String[] args){
Base b = new Derived();
System.out.println(b.getValue());
}
}
Explanation:-
Answer: Option D. -> 40
Question 2. What will be the output?
interface A{
public void method1();
}
class One implements A{
public void method1(){
System.out.println("Class One method1");
}
}
class Two extends One{
public void method1(){
System.out.println("Class Two method1");
}
}
public class Test extends Two{
public static void main(String[] args){
A a = new Two();
a.method1();
}
}
interface A{
public void method1();
}
class One implements A{
public void method1(){
System.out.println("Class One method1");
}
}
class Two extends One{
public void method1(){
System.out.println("Class Two method1");
}
}
public class Test extends Two{
public static void main(String[] args){
A a = new Two();
a.method1();
}
}
Explanation:-
Answer: Option B. -> Class Two method1
Question 3. What is the result of the following piece of code:
public class Person{
public void talk(){
System.out.print("I am a Person");
}
}
public class Student extends Person{
public void talk(){
System.out.print("I am a Student");
}
}
public class Test{
public static void main(String args[]){
Person p = new Student();
p.talk();
}
}
public class Person{
public void talk(){
System.out.print("I am a Person");
}
}
public class Student extends Person{
public void talk(){
System.out.print("I am a Student");
}
}
public class Test{
public static void main(String args[]){
Person p = new Student();
p.talk();
}
}
Explanation:-
Answer: Option B. -> I am a Student
Question 4. What will be the output of the following program code?
class Rectangle{
public int area(int length, int width){
return length*width;
}
}
class Square extends Rectangle{
public int area(long length, long width){
return (int) Math.pow(length, 2);
}
}
public class Test{
public static void main(String args[]){
Square r = new Square();
System.out.println(r.area(5 , 4));
}
}
class Rectangle{
public int area(int length, int width){
return length*width;
}
}
class Square extends Rectangle{
public int area(long length, long width){
return (int) Math.pow(length, 2);
}
}
public class Test{
public static void main(String args[]){
Square r = new Square();
System.out.println(r.area(5 , 4));
}
}
Explanation:-
Answer: Option B. -> Will compile and run printing out 20Explanation:-
Answer: Option C. -> Compilation Error
Question 7. What will be the output?
class A{
int i = 10;
public void printValue(){
System.out.print("Value-A");
}
}
class B extends A{
int i = 12;
public void printValue(){
System.out.print("Value-B");
}
}
public class Test{
public static void main(String args[]){
A a = new B();
a.printValue();
System.out.print(a.i);
}
}
class A{
int i = 10;
public void printValue(){
System.out.print("Value-A");
}
}
class B extends A{
int i = 12;
public void printValue(){
System.out.print("Value-B");
}
}
public class Test{
public static void main(String args[]){
A a = new B();
a.printValue();
System.out.print(a.i);
}
}
Explanation:-
Answer: Option B. -> Value-B 10If you create object of subclass with reference of super class like ( A a = new B();) then subclass method and super class variable will be executed.
Question 8. Determine output:
class A{
public void printValue(){
System.out.println("Value-A");
}
}
class B extends A{
public void printNameB(){
System.out.println("Name-B");
}
}
class C extends A{
public void printNameC(){
System.out.println("Name-C");
}
}
1. public class Test{
2. public static void main (String[] args){
3. B b = new B();
4. C c = new C();
5. newPrint(b);
6. newPrint(c);
7. }
8. public static void newPrint(A a){
9. a.printValue();
10. }
11. }
class A{
public void printValue(){
System.out.println("Value-A");
}
}
class B extends A{
public void printNameB(){
System.out.println("Name-B");
}
}
class C extends A{
public void printNameC(){
System.out.println("Name-C");
}
}
1. public class Test{
2. public static void main (String[] args){
3. B b = new B();
4. C c = new C();
5. newPrint(b);
6. newPrint(c);
7. }
8. public static void newPrint(A a){
9. a.printValue();
10. }
11. }
Explanation:-
Answer: Option B. -> Value-A Value-AClass B extended Class A therefore all methods of Class A will be available to class B except private methods. Class C extended Class A therefore all methods of Class A will be available to class C except private methods.
Explanation:-
Answer: Option B. -> intPrimitive widening uses the smallest method argument possible. (For Example if you pass short value to a method but method with short argument is not available then compiler choose method with int argument). But in this case compiler will prefer the older style before it chooses the newer style, to keep existing code more robust. var-args method is looser than widen.
Explanation:-
Answer: Option A. -> Class A methodOverriding in Java simply means that the particular method would be called based on the run time type of the object and not on the compile time type. But in the above case the methods are static which means access to them is always resolved during compile time only using the compile time type information. Accessing them using object references is just an extra liberty given by the designers of Java.