산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

자바 다형성

자바 다형성

이 자습서에서는 예제를 통해 Java 다형성 및 구현에 대해 알아봅니다.

다형성은 객체 지향 프로그래밍의 중요한 개념입니다. 단순히 하나 이상의 형식을 의미합니다.

즉, 동일한 엔터티(메서드 또는 연산자 또는 개체)가 다른 시나리오에서 다른 작업을 수행할 수 있습니다.

<시간>

예:자바 다형성

class Polygon {

  // method to render a shape
  public void render() {
    System.out.println("Rendering Polygon...");
  }
}

class Square extends Polygon {

  // renders Square
  public void render() {
    System.out.println("Rendering Square...");
  }
}

class Circle extends Polygon {

  // renders circle
  public void render() {
    System.out.println("Rendering Circle...");
  }
}

class Main {
  public static void main(String[] args) {
    
    // create an object of Square
    Square s1 = new Square();
    s1.render();

    // create an object of Circle
    Circle c1 = new Circle();
    c1.render();
  }
}

출력

Rendering Square...
Rendering Circle...

위의 예에서 우리는 슈퍼클래스를 생성했습니다:Polygon 및 두 개의 하위 클래스:Square . render() 사용에 주의하세요. 방법.

render()의 주요 목적 방법은 모양을 렌더링하는 것입니다. 그러나 정사각형을 그리는 과정은 원을 그리는 과정과 다릅니다.

따라서 render() 메소드는 클래스에 따라 다르게 동작합니다. 또는 render()라고 말할 수 있습니다. 다형성입니다.

<시간>

왜 다형성인가?

다형성을 사용하면 일관된 코드를 만들 수 있습니다. 이전 예에서 다른 메서드를 만들 수도 있습니다. renderSquare()renderCircle() 정사각형 렌더링 및 , 각각.

이것은 완벽하게 작동합니다. 그러나 모든 모양에 대해 다른 방법을 만들어야 합니다. 코드가 일관성이 없게 됩니다.

이 문제를 해결하기 위해 Java의 다형성을 사용하면 render() 단일 메서드를 만들 수 있습니다. 모양에 따라 다르게 작동합니다.

참고 :print() 방법은 또한 다형성의 예입니다. char와 같은 다양한 유형의 값을 인쇄하는 데 사용됩니다. , int , string

<시간>

다음 방법을 사용하여 Java에서 다형성을 달성할 수 있습니다.

  1. 메서드 재정의
  2. 메서드 오버로딩
  3. 연산자 과부하
<시간>

자바 메소드 재정의

Java에서 상속하는 동안 수퍼 클래스와 하위 클래스 모두에 동일한 메소드가 있는 경우. 그런 다음 하위 클래스의 메서드가 슈퍼 클래스의 동일한 메서드를 재정의합니다. 이를 메서드 재정의라고 합니다.

이 경우 동일한 메서드가 수퍼클래스에서 한 작업을 수행하고 하위 클래스에서 다른 작업을 수행합니다. 예를 들어,

예제 1:메소드 재정의를 사용한 다형성

class Language {
  public void displayInfo() {
    System.out.println("Common English Language");
  }
}

class Java extends Language {
  @Override
  public void displayInfo() {
    System.out.println("Java Programming Language");
  }
}

class Main {
  public static void main(String[] args) {

    // create an object of Java class
    Java j1 = new Java();
    j1.displayInfo();

    // create an object of Language class
    Language l1 = new Language();
    l1.displayInfo();
  }
}

출력 :

Java Programming Language
Common English Language

위의 예에서 Language라는 슈퍼클래스를 만들었습니다. 및 Java라는 하위 클래스 . 여기에서 메소드 displayInfo()언어 모두에 존재합니다. 및 자바 .

displayInfo() 사용 정보를 출력하는 것입니다. 그러나 Language에서 다른 정보를 인쇄하고 있습니다. 및 자바 .

메소드 호출에 사용한 객체를 기준으로 해당 정보를 출력합니다.

<그림>

참고 :호출되는 메소드는 프로그램 실행 중에 결정됩니다. 따라서 메서드 재정의는 런타임 다형성입니다. .

<시간>

2. 자바 메소드 오버로딩

Java 클래스에서 매개변수가 다른 경우 동일한 이름의 메소드를 작성할 수 있습니다. 예를 들어,

void func() { ... }
void func(int a) { ... }
float func(double a) { ... }
float func(int a, float b) { ... }

이것은 Java에서 메소드 오버로딩으로 알려져 있습니다. 여기에서 동일한 메소드가 매개변수에 따라 다른 작업을 수행합니다.

예시 3:메소드 오버로딩을 사용한 다형성

class Pattern {

  // method without parameter
  public void display() {
    for (int i = 0; i < 10; i++) {
      System.out.print("*");
    }
  }

  // method with single parameter
  public void display(char symbol) {
    for (int i = 0; i < 10; i++) {
      System.out.print(symbol);
    }
  }
}

class Main {
  public static void main(String[] args) {
    Pattern d1 = new Pattern();

    // call method without any argument
    d1.display();
    System.out.println("\n");

    // call method with a single argument
    d1.display('#');
  }
}

출력 :

**********

##########

위의 예에서 Pattern이라는 클래스를 만들었습니다. . 클래스에 display()라는 메서드가 포함되어 있습니다. 과부하입니다.

// method with no arguments
display() {...}

// method with a single char type argument
display(char symbol) {...}

여기서 display()의 주요 기능은 패턴을 인쇄하는 것입니다. 그러나 전달된 인수를 기반으로 메서드는 다른 작업을 수행하고 있습니다.

참고 :호출되는 메소드는 컴파일러에 의해 결정됩니다. 따라서 컴파일 타임 다형성이라고도 합니다.

<시간>

3. 자바 연산자 오버로딩

Java의 일부 연산자는 피연산자에 따라 다르게 동작합니다. 예를 들어,

연산자 오버로딩을 사용하여 다형성을 달성하는 방법을 살펴보겠습니다.

+ 연산자는 두 엔터티를 추가하는 데 사용됩니다. 그러나 Java에서는 + 연산자는 두 가지 작업을 수행합니다.

1. +일 때 숫자(정수 및 부동 소수점 숫자)와 함께 사용되며 수학적 덧셈을 수행합니다. 예를 들어,

int a = 5;
int b = 6;

// + with numbers
int sum = a + b;  // Output = 11

2. +을 사용할 때 연산자를 문자열로 사용하면 문자열 연결(두 문자열 결합)을 수행합니다. 예를 들어,

String first = "Java ";
String second = "Programming";

// + with strings
name = first + second;  // Output = Java Programming

여기에서 + 연산자는 Java에서 오버로드되어 추가의 두 가지 작업을 수행합니다. 및 연결 .

참고 :C++와 같은 언어에서는 다른 피연산자에 대해 다르게 작동하도록 연산자를 정의할 수 있습니다. 그러나 Java는 사용자 정의 연산자 오버로딩을 지원하지 않습니다.

<시간>

다형성 변수

다른 조건에서 다른 값을 참조하는 경우 변수를 다형성이라고 합니다.

객체 변수(인스턴스 변수)는 Java에서 다형성 변수의 동작을 나타냅니다. 클래스의 객체 변수는 해당 클래스의 객체뿐만 아니라 하위 클래스의 객체도 참조할 수 있기 때문입니다.

예:다형성 변수

class ProgrammingLanguage {
  public void display() {
    System.out.println("I am Programming Language.");
  }
}

class Java extends ProgrammingLanguage {
  @Override
  public void display() {
    System.out.println("I am Object-Oriented Programming Language.");
  }
}

class Main {
  public static void main(String[] args) {

    // declare an object variable
    ProgrammingLanguage pl;

    // create object of ProgrammingLanguage
    pl = new ProgrammingLanguage();
    pl.display();

    // create object of Java class
    pl = new Java();
    pl.display();
  }
}

출력 :

I am Programming Language.
I am Object-Oriented Programming Language.

위의 예에서 객체 변수 pl을 만들었습니다. ProgrammingLanguage 수업. 여기, pl 다형성 변수입니다. 그 이유는

이것은 자바에서 업캐스팅하는 예입니다.


java

  1. 자바 연산자
  2. 자바 인터페이스
  3. 자바 리소스 사용
  4. 자바 주석
  5. 자바 주석 유형
  6. Java의 String Length() 메서드:예제로 찾는 방법
  7. 하위 문자열 및 예제가 있는 Java 문자열 indexOf() 메서드
  8. 예제가 있는 Java 문자열 charAt() 메서드
  9. 예제가 포함된 Java 문자열 endWith() 메서드
  10. Java 문자열 replace(), replaceAll() 및 replaceFirst() 메서드