ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 8일차_클래스의 상속, 오버라이딩 + 실습
    1학년/자바 공부 2022. 8. 23. 14:44

     

    이거 노션 복붙해서 가져와서 그런가 왜 번호가 모든 줄에 다 매겨져 있는 것 ..? 

     

    상속

    1. 클래스 상속이란?     
    2. :이미 마련되어있는 클래스를 사용하여 효율적인 개발을 위해서 사용한다. 상속을 하더라도 자식 클래스가 부모 클래스의 모든 것을 받은 건 아니다. private접근제어자는 자식이 물려받을 수 없으며, 부모와 자식 클래스가 같은 패키지에 없다면 부모의 클래스는 물려받을 수 없다.
    3. 부모와 자식 클래스가 있으며 자식 클래스는 부모 클래스의 멤버를 상속받아 그대로 쓸 수 있다.
    4. 클래스를 상속하는 방법은 무엇인가?
      class 자식 클래스 이름 extend 부모클래스 이름{ ... }
      
      다음은 코드 예시이다
    5. public class ParentBook{ String name; int price; public void Print(){ System.out.println("책의 이름과 가격 : " +name+""+price); }
    6. 상속받고자 하는 자식 클래스명 옆에 extends 키워드를 붙이고 상속할 부모 클래스 명을 적어준다.
    public class ChildBook extends ParentBook{
    	ChildBook(String name, int price){
    		this.name = name;
    		this.price = price;
    }
    
    public static void main(String[] args){
    	ChildBook Child = new ChildBook("나의 라임 오렌지 나무",100000);
    	system.out.print("[구현결과1]");
    	child.Print();
    }
    

    만약 부모클래스와 자식 클래스의 변수 ? 인스턴스 ? 명이 겹친다면 super. ~~~ 이런식으로 super를 붙여주면 된다.

    1. 자바 클래스 다중상속이 가능한가?       불가능하다.

    오버라이딩

    1. 오버라이딩이란?
      class Parent{
      	void display() { System.out.println("부모 클래스의 display()메소드 입니다.");
      	}
      }
      class Child extends Parent{
      	void display(){ System.out.println("자식 클래스의 display()메소드입니다");
      	}
      }
      
      public class Inheritance{
      	public static void main(String[] args){
      		Parent pa = new Parent();
      		pa.display();
      		Child ch = new Child();
      		ch.display();
      		Parent pc = new Child();
      		pc.display();
      	}
      }
      
    2. 부모 클래스에서 이미 정의된 멤소드를 자식 클래스에서 같은 의미를 갖는 메소드로 다시 재정의하여 사용한다. 부모 클래스보다 큰 범위는 불가능하다.

    실습

    1. 클래스 Animal을 상속하는 클래스 Dog, Cat, Cow가 있다.
    2. Dog, Cat, Cow는 각각 나이, 성별, 무게를 가지고, 이 정보를 출력하는 메서드 printInfo()와 각 동물의 소리를 내는 메서드HowToSpeak() 을 가진다.
    3. Dog는 멍멍! 이라는 소리를 낸다. Cat은 야옹 이라는 소리를 낸다. Cow는 음메~ 라는 소리를 낸다.

    나이는 0살~20살 중 무작위로 결정된다. 성별은 암컷, 수컷 중 무작위로 결정된다. 무게는 Dog의 경우 1~30 kg, Cat의 경우 1~15kg, Cow의 경우 1~300kg 중 무작위로 결정된다.

    To do : main 메서드에서, Dog, Cat, Cow의 객체를 무작위로 총 24개를 만들어서, 모든 객체의 나이, 성별, 무게 정보를 출력하고 난 후 객체가 어떤 소리를 내는지 출력한다. (Dog + Cat + Cow = 24개)

    ※ 클래스 상속, 메서드 오버라이딩을 적절하게 사용하셔야 하며 반복문 하나를 이용해서 각각 동물의 정보와 내는 소리를 출력하셔야 합니다.

    package assign8;
    
    import java.util.Random;
    
    class Animal {
        String name;
        int age;
        String gender;
        int weight;
    
        public void printfinfo(){
            System.out.println("동물 : "+name+" , 나이 : "+age+" , 무게 : "+weight+" , 성별 : "+gender);
        }
    }
    class Dog extends Animal{
    
        String name = "Dog";
        public void printfinfo(){
            System.out.println("동물 : "+name + " , 나이 : "+age+" , 무게 : "+weight+" , 성별 : "+gender);
        }
        public void howtospeak(){
            System.out.println("울음소리 :  멍멍 ");
        }
    }
    class Cat extends Animal{
    
        String name = "Cat";
    
        public void printfinfo(){
            System.out.println("동물 : "+this.name + " , 나이 : "+this.age+" , 무게 : "+this.weight+" , 성별 : "+this.gender);
        }
        public void howtospeak(){
            System.out.println("울음소리 :  냐옹 ");
        }
    }
    class Cow extends Animal{
    
        String name = "Cow";
    
        public void printfinfo(){
            System.out.println("동물 : "+this.name + " , 나이 : "+this.age+" , 무게 : "+this.weight+" , 성별 : "+this.gender);
        }
        public void howtospeak(){
            System.out.println("울음소리 :  음메 ");
        }
    }
    
    public class practic {
        public static void main(String[] args) {
        Random rand = new Random();
        
        Dog dog = new Dog();
        Cat cat = new Cat();
        Cow cow = new Cow();
        Animal a = new Animal();
    
        String[] genderarr = {"암컷","수컷"};
        String[] namearr = {"Cat","Dog","Cow"};
    
        for(int i = 0 ; i < 24; i ++){
            String name = namearr[rand.nextInt(3)];
            if(name.equals(dog.name)){
                dog.gender = genderarr[rand.nextInt(2)];
                dog.age = rand.nextInt(20);
                dog.weight = rand.nextInt(30)+1;
                dog.printfinfo();
                dog.howtospeak();;
            }
            if(name.equals(cat.name)){
                cat.gender = genderarr[rand.nextInt(2)];
                cat.age = rand.nextInt(20);
                cat.weight = rand.nextInt(30)+1;
                cat.printfinfo();
                cat.howtospeak();;
            }
            if(name.equals(cow.name)){
                cow.gender = genderarr[rand.nextInt(2)];
                cow.age = rand.nextInt(20);
                cow.weight = rand.nextInt(30)+1;
                cow.printfinfo();
                cow.howtospeak();;
            }
        }
    
        }
    }
    728x90

    댓글

Designed by Tistory.
티스토리 친구하기