본문 바로가기

개발자정보

자바 추상화(Abstraction)와 상속

반응형

추상 클래스 및 메서드
데이터 추상화는 특정 세부 사항을 숨기고 사용자에게 필수적인 정보만 보여주는 과정이다.
추상화는 추상 클래스 또는 인터페이스(다음 장에서 자세히 학습할 것)를 통해 달성될 수 있습니다.

abstract 키워드는 클래스 및 메서드에 사용되는 비액세스 한정자입니다.

Abstract class: 개체를 만드는 데 사용할 수 없는 제한된 클래스입니다. 이 클래스에 액세스하려면 다른 클래스에서 상속되어야 합니다.

추상 메서드: 추상 클래스에서만 사용할 수 있으며 본문이 없습니다. 본문은 하위 클래스(에서 상속됨)에 의해 제공됩니다.

 

abstract class Animal {
  public abstract void animalSound();
  public void sleep() {
    System.out.println("Zzz");
  }
}

 

// Abstract class
abstract class Animal {
  // Abstract method (does not have a body)
  public abstract void animalSound();
  // Regular method
  public void sleep() {
    System.out.println("Zzz");
  }
}

// Subclass (inherit from Animal)
class Pig extends Animal {
  public void animalSound() {
    // The body of animalSound() is provided here
    System.out.println("The pig says: wee wee");
  }
}

class Main {
  public static void main(String[] args) {
    Pig myPig = new Pig(); // Create a Pig object
    myPig.animalSound();
    myPig.sleep();
  }
}

 

자바 상속(Inheritance)

자바에서는 한 클래스에서 다른 클래스로 속성과 메서드를 상속할 수 있다. 우리는 "상속 개념"을 두 가지 범주로 분류한다.

하위 클래스(하위 클래스) - 다른 클래스에서 상속되는 클래스
superclass(상위) - 상속되는 클래스
클래스에서 상속하려면 확장 키워드를 사용합니다.

 

class Vehicle {
  protected String brand = "Ford";        // Vehicle attribute
  public void honk() {                    // Vehicle method
    System.out.println("Tuut, tuut!");
  }
}

class Car extends Vehicle {
  private String modelName = "Mustang";    // Car attribute
  public static void main(String[] args) {

    // Create a myCar object
    Car myCar = new Car();

    // Call the honk() method (from the Vehicle class) on the myCar object
    myCar.honk();

    // Display the value of the brand attribute (from the Vehicle class) and the value of the modelName from the Car class
    System.out.println(myCar.brand + " " + myCar.modelName);
  }
}

 

 

Java Polymorphism

다형성은 '여러 가지 형태'를 의미하며, 유전으로 서로 연관된 계층이 많을 때 발생한다.

이전 장에서 지정한 대로 상속을 통해 다른 클래스의 속성과 메서드를 상속할 수 있습니다. 다형성은 다양한 작업을 수행하기 위해 이러한 방법을 사용합니다. 이를 통해 단일 작업을 다양한 방식으로 수행할 수 있습니다

class Animal {
  public void animalSound() {
    System.out.println("The animal makes a sound");
  }
}

class Pig extends Animal {
  public void animalSound() {
    System.out.println("The pig says: wee wee");
  }
}

class Dog extends Animal {
  public void animalSound() {
    System.out.println("The dog says: bow wow");
  }
}

 

class Animal {
  public void animalSound() {
    System.out.println("The animal makes a sound");
  }
}

class Pig extends Animal {
  public void animalSound() {
    System.out.println("The pig says: wee wee");
  }
}

class Dog extends Animal {
  public void animalSound() {
    System.out.println("The dog says: bow wow");
  }
}

class Main {
  public static void main(String[] args) {
    Animal myAnimal = new Animal();  // Create a Animal object
    Animal myPig = new Pig();  // Create a Pig object
    Animal myDog = new Dog();  // Create a Dog object
    myAnimal.animalSound();
    myPig.animalSound();
    myDog.animalSound();
  }
}

 

 

Java Interface

자바에서 추상화를 달성하는 또 다른 방법은 인터페이스를 사용합니다.

// interface
interface Animal {
  public void animalSound(); // interface method (does not have a body)
  public void run(); // interface method (does not have a body)
}

 

// Interface
interface Animal {
  public void animalSound(); // interface method (does not have a body)
  public void sleep(); // interface method (does not have a body)
}

// Pig "implements" the Animal interface
class Pig implements Animal {
  public void animalSound() {
    // The body of animalSound() is provided here
    System.out.println("The pig says: wee wee");
  }
  public void sleep() {
    // The body of sleep() is provided here
    System.out.println("Zzz");
  }
}

class Main {
  public static void main(String[] args) {
    Pig myPig = new Pig();  // Create a Pig object
    myPig.animalSound();
    myPig.sleep();
  }
}

 

interface FirstInterface {
  public void myMethod(); // interface method
}

interface SecondInterface {
  public void myOtherMethod(); // interface method
}

class DemoClass implements FirstInterface, SecondInterface {
  public void myMethod() {
    System.out.println("Some text..");
  }
  public void myOtherMethod() {
    System.out.println("Some other text...");
  }
}

class Main {
  public static void main(String[] args) {
    DemoClass myObj = new DemoClass();
    myObj.myMethod();
    myObj.myOtherMethod();
  }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'개발자정보' 카테고리의 다른 글

웹 개발자 HTML 태그 정리  (0) 2022.06.10
자바 Threads를 활용한 병렬처리  (0) 2022.06.04
Java Exceptions  (0) 2022.06.04
Java 클래스(Classes)와 객체(Objects)  (0) 2022.06.04
Java 조건 및 반복문 정리  (0) 2022.06.04