$show=/label

Java IS-A and HAS-A Relationship

SHARE:

Now a days, Many programmers get counfused with these IS-A and HAS-A relationships. It is a common interview question for freshers and expe...

Now a days, Many programmers get counfused with these IS-A and HAS-A relationships. It is a common interview question for freshers and experienced programmers to check their the basic knowledge of oops principles.


We will discuss about the following

1) IS-A Relationship (Inheritance)
2) HAS-A Relationship (Association)
3) Examples for each type
4) Interview Questions

Java IS-A and HAS-A Relationship


The main idea of these two principles are code reusability and easy code maintainance. You will see now how the code can be easily reusable in many places and used by many other programmers.



IS-A Relationship (Inheritance):


IS-A Relationship can be formed with the minimum of two classes with a relation. This is referred as Inheritance in java.
Let us take a simple example for our understanding. We know every four wheeler Car is a Vehicle.
Honda is a Car
Suziki is a Car
Toyota is a Car
benz is a Car

So, From these examples all four wheeler brands are Cars and all have some common features such as color, max speed, gears type etc. These common features will be in Car class and car specific features will be in Car Brand car.

IS-A relationship is implemented by using "extends" keyword in java inheritance. Whenever you find "extends" keyword anywhere in your application that is IS-A Relationship.

Creating one is Car class and many car specific classes.


IS-A Relationship Example:


// Common features class
class Car {
 int avgSpeed;
 int currentSpeed;

 public int getCurrentSpeed() {
  return currentSpeed;
 }

 public void setCurrentSpeed(int currentSpeed) {
  this.currentSpeed = currentSpeed;
 }

 public int getAvgSpeed() {
  return avgSpeed;
 }

 public void setAvgSpeed(int maxSpeed) {
  this.avgSpeed = maxSpeed;
 }

 public int getNoOfGears() {
  return 6;
 }

 public String getDefaultColor() {
  return "White";
 }

}


In Car class it has common methods which are used by all its sub classes. It has default no of gears, color, can be set the current speed.

Below is a Honda car which is a subclass of Car. It has its  own specific max speed is 120. Inside Honda car, we can use all methods of Car class.


// Honda specific implementation class
class Honda extends Car {

 public void startHondaCar() {
  setAvgSpeed(70);
  System.out.println("Started Honda Car with average speed : " + getAvgSpeed());
 }

 public int getMaxSpeed() {
  return 120;
 }

 public void stopHondaCar() {
  System.out.println("Honda Car has stopped");
 }
}


Below is a Maruthi car which is a subclass of Car. It has its  own specific max speed is 100. Inside Honda car, we can use all methods of Car class.


// Maruthi specific implementation class
class Maruthi extends Car {

 public void startHondaCar() {
  setAvgSpeed(100);
  System.out.println("Started Maruthi Car with average speed : " + getAvgSpeed());
 }

 public int getMaxSpeed() {
  return 100;
 }

 public void stopHondaCar() {
  System.out.println("Maruthi Car has stopped");
 }

}


In these two Honda, Maruthi classes has access to Car class and all Car mehtods are accessible from these subclasses.

Main class of IS-A relationship.

// Main method for IS-A Relationship
public class IsARelationShip {

 public static void main(String[] args) {
  System.out.println("Honda specific implementation.");
  Honda hondaCar = new Honda();
  hondaCar.startHondaCar();
  System.out.println("Honda car max speed: " + hondaCar.getMaxSpeed());
  hondaCar.stopHondaCar();

  System.out.println("\nMaruthi specific implementation.");
  Maruthi maruthiCar = new Maruthi();
  maruthiCar.startHondaCar();
  System.out.println("Honda car max speed: " + maruthiCar.getMaxSpeed());
  maruthiCar.stopHondaCar();

 }

}

Output:


Honda specific implementation.
Started Honda Car with average speed : 70
Honda car max speed: 120
Honda Car has stopped

Maruthi specific implementation.
Started Maruthi Car with average speed : 100
Honda car max speed: 100
Maruthi Car has stopped

In this example program, Car class has all common features of a car which all are requried by all its implementation cars which can be default features. If Honda wants its own specific then they have ability to provide its own implementation for those methods which is called as Method Overriding.

Please go through the above program and leave your questions in the comments section.

HAS-A Relationship (Association):


HAS-A relationship also can be formed by minimum two classes. If any class has instance variable that referring another class.

Let us break down into example for better understanding. Honda car has a Engine, Maruthi car has a Engine.


HAS-A Relationship Example:

Creating a Engine class which has engine related functions.


// Engine specific implementation class
class Engine {
 public void startWithDieselEngine() {
  System.out.println("Diesel engine has added and it's started");
 }

 public void startWithPetrolEngine() {
  System.out.println("Petrol engine has added and it's started");
 }

 public void startWithAutomaticEngine() {
  System.out.println("Automatic engine has added and it's started");
 }
}


Creating ToyotaDiesel class which has instance variable of Engine class. Instance variable engine calls startWithDieselEngine() method and ignoring remaining methods in Engine class.


// Toyota Diesel car
class ToyotaDiesel {

 public Engine engine;

 public Engine getEngine() {
  return engine;
 }

 public void setEngine(Engine engine) {
  this.engine = engine;
 }

 public ToyotaDiesel() {
  System.out.println("Toyota Diesel  car has constructed");
 }

 public void startEngine() {
  engine.startWithDieselEngine();
 }
}


Another class, instance variable referring to Engine class. Invoking benz automatic engine startWithDieselEngine().

// Benz Automatic car
class BenzAutomatic {

 public Engine engine;

 public Engine getEngine() {
  return engine;
 }

 public void setEngine(Engine engine) {
  this.engine = engine;
 }

 public BenzAutomatic() {
  System.out.println("Benz Automatic car has constructed");
 }

 public void startEngine() {
  engine.startWithDieselEngine();
 }
}

Main method IS-A relationship class:


// Main method for IS-A Relationship
public class HasARelationShip {

 public static void main(String[] args) {
  // Creating Engine Object
  Engine engine = new Engine();

  // Toyota diesel car
  System.out.println("ToyotaDiesel specific implementation.");
  ToyotaDiesel toyotaDieselCar = new ToyotaDiesel();
  toyotaDieselCar.setEngine(engine);
  toyotaDieselCar.startEngine();

  // Benz Automatic car
  System.out.println("\nBenzAutomatic specific implementation.");
  BenzAutomatic benzAutomatic = new BenzAutomatic();
  benzAutomatic.setEngine(engine);
  benzAutomatic.startEngine();

 }

}

Output:


ToyotaDiesel specific implementation.
Toyota Diesel  car has constructed
Diesel engine has added and it's started

BenzAutomatic specific implementation.
Benz Automatic car has constructed
Diesel engine has added and it's started

Interview Questions?


1) What is IS-A Relationship.
2) What is HAS-A Relationship.
3) What are the differences between IS-A and HAS-A relationships?
4) When do you use both. Give some examples.

Summary:


Java IS-A and HAS-A Relationship plays a significant role in all applications.
HAS-A relationship is declared with "extends" keyword and helpful when all functionalities are need in sub-classes.This handled by the java compiler with intelligence.
Where as IS-A Relationship is not declared with any keyword but it comes into reality when use a instance variable to another class which has some common functionalities. You can see that only one method is used in IS-A relationship examples.

Please leave if you have interview questions on this topic.

COMMENTS

BLOGGER

About Us

Author: Venkatesh - I love to learn and share the technical stuff.
Name

accumulo,1,ActiveMQ,2,Adsense,1,API,37,ArrayList,16,Arrays,7,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,5,Collections,22,Collector,1,Command Line,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,6,Core Java,81,Corona India,1,Create,2,CSS,1,Date,3,Date Time API,4,Dictionary,1,Difference,1,Download,1,Eclipse,2,Efficiently,1,Error,1,Errors,1,Exception,1,Exceptions,3,Fast,1,Files,9,Float,1,Font,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,4,Grant,1,Grep,1,HashMap,1,HomeBrew,2,HTML,2,HttpClient,2,Immutable,1,Installation,1,Interview Questions,5,Iterate,2,Jackson API,3,Java,29,Java 10,1,Java 11,5,Java 12,5,Java 13,2,Java 14,2,Java 8,66,Java 8 Difference,2,Java 8 Stream Conversions,2,java 8 Stream Examples,3,Java 9,1,Java Conversions,11,Java Design Patterns,1,Java Files,1,Java Program,2,Java Programs,65,java.lang,5,java.util. function,1,jQuery,1,Kotlin,10,Kotlin Conversions,3,Kotlin Programs,6,Lambda,1,lang,29,Leap Year,1,live updates,1,Logging,1,Mac OS,2,Math,1,Maven,1,Method References,1,Mockito,1,MongoDB,3,New Features,1,Operations,1,Optional,6,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,1,Sort,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Streams,21,String,58,String Programs,9,String Revese,1,Swing,1,System,1,Tags,1,Threads,10,Tomcat,1,Tomcat 8,1,Troubleshoot,16,Unix,2,Updates,3,util,5,While Loop,1,
ltr
item
JavaProgramTo.com: Java IS-A and HAS-A Relationship
Java IS-A and HAS-A Relationship
https://2.bp.blogspot.com/-A4Lvi4diQfk/WghhqxeDxoI/AAAAAAAAA28/cQpB21vXAdcz16iyvgic8-GnZcggnIUnACLcBGAs/s320/Java%2BIS-A%2Band%2BHAS-A%2BRelationship.jpg
https://2.bp.blogspot.com/-A4Lvi4diQfk/WghhqxeDxoI/AAAAAAAAA28/cQpB21vXAdcz16iyvgic8-GnZcggnIUnACLcBGAs/s72-c/Java%2BIS-A%2Band%2BHAS-A%2BRelationship.jpg
JavaProgramTo.com
https://www.javaprogramto.com/2017/11/is-a-has-a-relationship.html
https://www.javaprogramto.com/
https://www.javaprogramto.com/
https://www.javaprogramto.com/2017/11/is-a-has-a-relationship.html
true
3124782013468838591
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content