Wednesday, August 23, 2017

Java Programming Interview Questions Series 02 - OOP Concepts





1.      What are the relationships in OOP?                     
                   There two types of relationships in Java.
·  IS-A relationship - Inheritance is an example of IS-A relationship.
·  HAS-A relationship - Aggregation is an example of HAS-A relationship.

2.     What is the difference between StringBuffer and String?
The String is an immutable class. You cannot modify its content once created. If we change the content of the String object, it creates a new string and refers to that new String. But StringBuffer is a mutable class. That means you can change/replace the content later.

3.     Can we use multiple inheritances in Java?
There are 4 types of inheritances that we can find in Java.
1.     Single Inheritance
2.     Multilevel Inheritance
3.     Hierarchical Inheritance
4.     Multiple Inheritance

But Multiple Inheritance is not supported in Java. Because,
·        To remove ambiguity.

·        To provide more maintainable and clear design.

4.     What is the difference between super() and this()?
Basically super() keyword comes from Inheritance. It is used to refer,
·        Immediate parent class constructor,
·        Immediate parent class variable,
·        Immediate parent class method.
   This() keyword is usually used to refer the current object whose method is being invoked. From this() keyword, we can refer any member in the current object.

5.     Can we use both super() and this() in a constructor?
           We can't use. Because both super() and this() must be the first statement inside a constructor. Once we call super() or this() constructor, it doesn’t work as method calling. It just map the super() or this() objects. Therefore we can’t use it.

6.     What is aggregation in java and why we need this?
Aggregation is a special form of association (HAS-A relationship). But it is not the main feature in Java. It has a one-way association. For an example, consider two classes called Student class and Address class, each student must have an address but each address may not have a student and it doesn’t make any sense. That is why it has a one-way association. Below example shows the how aggregation can be used.

  


You can see that in Student class, Address class is used. From that way, we obtain student address. This relationship is called Aggregation.
To maintain code reusability we need Aggregation. Let’s think that we have two another class of School and staff. In order to maintain all the classes’ addresses, we don’t just have to use the reference of Address class by defining inside each class.

7.     When to use Inheritance and Aggregation?
Using the Aggregation is the better option when you need to use property and behaviour of a class without modifying it inside your class. On the other hand, Inheritance is better to use when you need to use and modify property and behaviour of a class inside your class.

8.     What is Overriding?
Overriding occurs when we use Inheritance. In this feature, that allows the sub class to give a particular implementation of a method. But that method is already provided by one of its super class. If that method in the sub class has the same name, same return type, same signature and same parameters as a method in its super class, at that point the method in the sub class is said to override the method in the super class.

9.     Why Overriding phenomena happen?
If we use a sub class object using sub class reference and invoke a method, the compiler will check the sub class first and if it cannot find such method then it will check the super class.
If we use a sub class object using super class reference and invoke a method, the compiler will check the super class. But if it cannot find such method it will not check in sub class. Because the super class is not extended the sub class. Therefore it will create a compilation error.

10. What is the difference between Overloading and Overriding?

Method Overloading
Method Overriding
1.     The name must be same but parameter must be different.
2.     Increase readability of the code.
3.     Compile time polymorphism.
4.     Access specifier can be changed.
1.     Both name and parameter must be same.
2.     Increase reusability of the code.
3.     Runtime polymorphism.
4.     Access specifier cannot be more restrictive than the original method.


11. Can we override static method?
No, we cannot override static methods. Because static methods exist in the place called Class area.  On the other hand method overriding is associated with the object at runtime and they exist in the place called Heap.

12. What are Upcasting and Downcasting?
When a child class object is referenced by parent class reference variable is called Upcasting.
When a parent class object is referenced by child class reference variable is called Downcasting.

 
Parent p = new Parent();         
Child c = new Child();


Parent p = new Child();  //This is Upcasting.
          Child c = new Parent(); //This is Downcasting. 




But in Downcasting it gives a compilation error saying ‘incompatible type’. Therefore we can cast the Parent object to Student object.
                   Child c = (Child) new Parent();
This will be compiled successfully but throws ‘ClassCastException’ at runtime.

13. Can we override static methods exist in the Super class?
No. We cannot override static methods. Because overriding happens only for the instances that are created temporally when they are invoked. But once we static a method it exists in the Class area and we can directly access it at any time without any object.

14. Why static methods do not need (but can access) any object of a class?
Because all the static variables and static methods exist in the place ‘Class Area’. Therefore without any instance of a class, we can access any method or variable which are static.

15. Why a final class cannot be inherited but a final method can be inherited?
‘Final’ keyword has a different meaning when it uses for classes, methods and variables.
     a.  A final class cannot be extended.
     b. A final method cannot be overridden.
     c.  A final variable cannot be assigned after it has been initialized.   

That is because the language designers chose to design the language in that way.









Monday, August 21, 2017

Java Programming Interview Questions Series 01 - OOP Concepts



1. What are the main features in OOP?
               There are four main features in OOP. 
                            1. Inheritance
                            2. Polymorphism
                            3. Encapsulation
                            4. Abstraction
                As an Object-Oriented language, Java supports all the above features. 

2. What is the difference between parameter and argument?
               A Parameter is a variable which is defined by a method. It has no value in it but it will receive a value when the method is called.
                  An Argument is a value that is passed to the method when it is called.

        

3. What are the two methods to pass an argument to a method?
                1. Call-by-value: A copy of an argument value is passed to the method. Therefore modification of that argument value will not affect the original argument value.
                2. Call-by-reference: Reference to the argument is passed to the method. Therefore modification will affect the argument value.

4. What is method overloading?
                If two or more methods in a class having the same name but different parameters, it is called as method overloading. There are two types of overloading.
                              1. Method overloading by changing the data type of the argument
                              2. Method overloading by changing number of argument.

5. What is meant by default constructor?
               A constructor is a special method in a class that is used to initialize an object. Every class has a constructor. If we don't declare a constructor for a class, the compiler will create a default constructor for that class but it has no arguments. The default constructor has no meaningful implementation in it. 

6. Can we overload constructors?
             Yes. Constructors are also working as a normal method. To construct objects in different ways, we can overload constructors. 

7. What is the difference between constructor and a normal method?
               Constructors have special attributes rather than normal method. 
                              - Constructors must have the same name as the class.
                              - Constructors return the current state of a class. But constructor signature does not have any return type. 
                              - Constructors in java cannot be abstract, synchronized or static.
                              - They are only called once for an object.
               A normal method can be called many times and can be static, final, abstract. And it can return a value or can be void. 

8. What is meant by garbage collection?
               Normally the object will be destroyed automatically from the memory by the JVM. If there is no reference to an object, then it is assumed that the particular object is no longer needed and the memory will release the occupied memory. That technique is called Garbage Collection.

9. What are the advantages of Garbage collection?
           The programmer does not need to dereferencing an object. Because JVM does it automatically. Therefore memory efficiency will increase and decrease the chance to a memory leak.

10. What are Access Control Modifiers and Non-Access Modifiers?
             Basically, modifiers are keywords, that are used to change the meaning of a definition.
                              1. Access Control Modifiers
                                   Private    : Visible to the class only.
                                   Protected : Visible to the package and all subclasses.
                                   Default    : Visible to the package only.
                                   Public      : Visible to the world.
                          2. Non-Access Modifiers
                                   Static Used in classes and methods which can be accessed without an instance of a class.
                                   Final : Act as constant. Then, class, method or variable cannot be changed.
                                   Synchronized : Used in Threads. Then only one thread can be accessed to that method at a given point in time.
                                   Volatile : Used in Threads. It tells the compiler that the particular volatile variable can be changed unexpectedly in other segments of the program.
                                   Transient : Used in instance variables. Then it's value doesn't persist when an object is serialized.
                                   Abstract : Used to create abstract classes and methods.

11. Why constructors cannot be static?
               The need of a constructor is to initialize the contents of an instance of the class. But static methods do not have an instance. They stay in the place called class area. Therefore they can be executed without an instance. Therefore static constructor does not make any sense.

12. Why the Main method is static?
               Static classes and methods can be accessed without an instance of a class. The entry point of any Java program is the Main method. Therefore it is declared as static because it is called before any object of the class is created.

13. What is static initialization block?
              This is used to initialize static data member. Static block executes before the Main method. Static initialization block can be viewed as 'static constructor.'

14. What is static variable and instance variable?
              Static variables are defined as a class member and they can be accessed without any object of that class (Like static methods) and they can be accessed using its class name. They have only one single storage.
             Instance variables are initialized when an object of the class is initialized. And they can be accessed using the name of the object. Instance variables get new memory each time a new object is created. 

15. Why a non-static variable cannot be referenced from a static context?
              Non-static variables are created when an instance of the particular class is created. It has no particular storage in memory like static variables. Therefore if you try to access a non-static variable without any instance, the compiler will complain because the particular variable is not created yet.











Copyright © iTecTricks | Powered By Blogger

Design by Shehan Vanderputt