-
8일차_클래스의 상속, 오버라이딩 + 실습1학년/자바 공부 2022. 8. 23. 14:44
이거 노션 복붙해서 가져와서 그런가 왜 번호가 모든 줄에 다 매겨져 있는 것 ..?
상속
- 클래스 상속이란?
- :이미 마련되어있는 클래스를 사용하여 효율적인 개발을 위해서 사용한다. 상속을 하더라도 자식 클래스가 부모 클래스의 모든 것을 받은 건 아니다. private접근제어자는 자식이 물려받을 수 없으며, 부모와 자식 클래스가 같은 패키지에 없다면 부모의 클래스는 물려받을 수 없다.
- 부모와 자식 클래스가 있으며 자식 클래스는 부모 클래스의 멤버를 상속받아 그대로 쓸 수 있다.
- 클래스를 상속하는 방법은 무엇인가?
다음은 코드 예시이다class 자식 클래스 이름 extend 부모클래스 이름{ ... }
- public class ParentBook{ String name; int price; public void Print(){ System.out.println("책의 이름과 가격 : " +name+""+price); }
- 상속받고자 하는 자식 클래스명 옆에 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를 붙여주면 된다.
- 자바 클래스 다중상속이 가능한가? 불가능하다.
오버라이딩
- 오버라이딩이란?
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(); } }
- 부모 클래스에서 이미 정의된 멤소드를 자식 클래스에서 같은 의미를 갖는 메소드로 다시 재정의하여 사용한다. 부모 클래스보다 큰 범위는 불가능하다.
실습
- 클래스 Animal을 상속하는 클래스 Dog, Cat, Cow가 있다.
- Dog, Cat, Cow는 각각 나이, 성별, 무게를 가지고, 이 정보를 출력하는 메서드 printInfo()와 각 동물의 소리를 내는 메서드HowToSpeak() 을 가진다.
- 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'1학년 > 자바 공부' 카테고리의 다른 글
11주차_추상클래스, 예외처리 (0) 2022.09.02 9주차_시간표 관리 프로그램 짜보기 (0) 2022.09.01 6일차_클래스,메서드,랜덤 클래스를 활용한 자동차 프로그램 코드 (0) 2022.08.02 4일차_메서드와 클래스 다시 정리 + 클래스와 메서드를 이용한 객체지향 프로그래밍 맛보기 (0) 2022.07.27 4일차_배열, 문자열, Int class , 아스키코드 (0) 2022.07.27