virtual class

HEP·2022년 12월 27일
0

OOP & Design Pattern

목록 보기
5/5

Animal Class

public virtual with sharing class Animal {
    String name {get; private set;}
    Integer weight {get; private set;}
    Integer age {get; private set;}

    public Animal(String name, Integer weight, Integer age){
        this.name = name;
        this.weight = weight;
        this.age = age;
    }

    public void makeSound(){
        System.debug(this.name + ' makes a sound. ');
    }

    public virtual void eat(){
        System.debug('The animal is eating');
    }

    public virtual void move(){
        System.debug('The animal is moving');
    }


}

Dog class


public with sharing class Dog extends Animal{
    String breed {get; private set;}
    String color {get; private set;}
    public Dog(String name, Integer weight, Integer age, String breed, String color){
        super(name, weight, age);
        this.breed = breed;
        this.color = color;
    }

    public override void eat(){
        System.debug('The dog is eating');
    }
    public override void move(){
        super.move();
        System.debug('to play fetch');
    }
    

실행 방법 =>

Animal fish = new Animal('goldfish', 1, 5);
fish.move();

Animal dog = new Dog('Nacho', 5,4, 'Origen', 'Tan');
dog.eat();
dog.move();
dog.makeSound();

정리 =>

  1. 클래스 상속해주려면 virtual or abstract 키워드 사용
  2. 하위 클래스에서 상위 메서드 override 하려면 상위 메서드에 virtual or abstract 키워드 사용
  3. super 키워드로 상위 생성자 뿐 아니라 상위 메서드도 호출 가능
  4. virtual class --> virtual method 가능
  5. abstract class --> abstract/virtual method 가능

궁금증 =>

Q1. Java에서는 abstract나 virtual 키워드가 없어도 extends가 되는걸로 보이는데,, "Java에서 instance method는 final로 선언되지 않은 이상 모두 virtual이다." 이런 이유 때문일까?
--> yes,, java virtual 관련 참고( https://www.javatpoint.com/virtual-function-in-java)

Q2. virtual class가 아니어도 virtual method 저장이 가능.
virtual class가 아니면 상속할 수 없는데 virtual class 없이 virtual method만 있는 경우의 활용법은?

profile
셀포합니다

0개의 댓글