[ 인스턴스화 ]
package zoo;
// 각각 동물들에 대한 클래스 생성, 내부에 sleep() 메소드, 내부에 출력명령어.
class Cat {
void sleep() {
System.out.println("Zzzz");
}
}
class Dog {
void sleep() {
System.out.println("Zzzz");
}
}
class Mouse {
void sleep() {
System.out.println("Zzzz");
}
}
class Horse {
void sleep() {
System.out.println("Zzzz");
}
}
public class Animal {
public static void main(String[] args) {
// 동물들을 인스턴스화 해보기
Cat cat = new Cat();
Dog dog = new Dog();
Mouse mouse = new Mouse();
Horse horse = new Horse();
cat.sleep();
dog.sleep();
mouse.sleep();
horse.sleep(); // sleep() 메소드 실행 --> Zzzz 출력실행
}
}
(만약 모든 동물들을 다 한꺼번에 재우고 싶다면)
package zoo;
class Cat {
void sleep() {
System.out.println("Zzzz");
}
}
class Dog {
void sleep() {
System.out.println("Zzzz");
}
}
class Mouse {
void sleep() {
System.out.println("Zzzz");
}
}
class Horse {
void sleep() {
System.out.println("Zzzz");
}
}
public class Animal {
public static void main(String[] args) {
Object[] ani = new Object[4]; // 배열객체 생성 (Object는 최상위 객체)
ani[0] = new Cat(); // 배열요소에 자식객체들 생성해서 넣기
ani[1] = new Dog();
ani[2] = new Mouse();
ani[3] = new Horse();
for (int i = 0; i < ani.length; i++) {
((Dog) ani[i]).sleep(); // 동물들의 객체타입이 달라서 실행안됨 ** Error!!
}
}
}
ERROR!!
Object(최상위 객체) 아래에 -> Ancestor 클래스 생성 -> sleep() 메서드 넣어주기
각 동물들 클래스에서 sleep() 메서드 지워주고, 클래스명 뒤에 extends Ancestor 추가!! (상속)
> Object 아래 Ancestor 아래 각 동물들(Cat, Dog, Mouse, Horse) 클래스 두고
for문으로 sleep() 메서드(Ancestor 의 기능) 반복실행.
Object --> Ancestor
최상위타입에서 --> 동물들 바로 위타입으로 바꿔줌.
package zoo;
// 동물들의 선조 (부모클래스) - 개, 고양이, 말, 쥐 (자식클래스)
class Ancestor {
void sleep() {
System.out.println("Zzzz");
}
}
class Cat extends Ancestor {
}
class Dog extends Ancestor {
}
class Mouse extends Ancestor {
}
class Horse extends Ancestor {
}
public class Animal {
public static void main(String[] args) {
Ancestor[] ani = new Ancestor[4]; // Ancestor에 대한 배열객체 생성
ani[0] = new Cat();
ani[1] = new Dog();
ani[2] = new Mouse();
ani[3] = new Horse();
for (int i = 0; i < ani.length; i++) { // 부모의 기능인 sleep() 한꺼번에 실행
// ani[i].sleep();
((Ancestor) ani[i]).sleep(); // Ancestor로 캐스트 필요*
}
}
}
* (Ancestor) ani [ i ]. sleep();
ani [ i ] 를 Ancestor로 캐스트 걸어서
(Ancestor) ani [ i ] 요만큼에 대해서 sleep() 메서드 실행
Zzzz
Zzzz
Zzzz
Zzzz
[ 배객체참조 이해하기 ] __ ㅠㅠㅠㅠㅠㅠㅠㅠ
package jun15;
import java.util.Arrays;
class Ancestor { // 개, 고양이, 말, 쥐의 선조
void sleep() {
System.out.println("Zzzzz...");
}
}
class Dog extends Ancestor{
String name;
int age;
}
class Mouse extends Ancestor {
String name;
int age;
}
class Horse extends Ancestor{
String name;
int age;
}
public class Animal {
public static void main(String[] args) {
// 각각 동물들을 인스턴스화 해보기
Object[] ani = new Object[3];
ani[0] = new Dog();
ani[1] = new Mouse();
ani[2] = new Horse();
ani[0] = "possible!"; // 배열의 타입이 Object여서 모든 타입의 값 저장가능
ani[1] = 1; // 배열의 타입이 Ancestor 일때는 불가능
ani[2] = true;
System.out.println(ani[0]); // possible!
System.out.println(ani[1]); // 1
System.out.println(ani[2]); true
}
}
힙 영역
배열 ani[3] Dog
[ 0 ][ 1 ][ 2 ] Mouse
Horse
배열의 각각 0, 1, 2 가 객체 Dog, Mouse, Horse 를 참조하고 있음.
ani[0] 에 값이 없는 상태라면
System.out.println( ani[0] ); // 주소값
ani[0] = "possible!"; 값을 넣어주면
System.out.println( ani[0] ); // 주소값 에 저장되어 있는 값인 possible! 이 출력
(책 p.227) ****************
[ 다른 패키지의 클래스 호출 ]
Project (jun15)
Ancestor(부모)
Dog , Mouse , Horse , Cat (자식)
package zoo
> class Ancestor ()
> public sleep() 메서드 (void) -> 출력문
> class Dog _ 인스턴스변수 name, age
> class Mouse _ 인스턴스변수 name, age
> class Horse _ 인스턴스변수 name, age
package zoo
> public class
Cat _ 인스턴스변수 name, age
package jun15
> public class Hunam
> public main 메서드 _ 여기에서 동물들(Dog , Mouse , Horse , Cat)불러올거
package zoo;
class Ancestor { // 개, 고양이, 말, 쥐의 선조
public void sleep() {
System.out.println("Zzzzz...");
}
}
// 각 동물클래스 내부에 인스턴스 변수 선언
class Dog extends Ancestor{
String name;
int age;
}
class Mouse extends Ancestor{
String name;
int age;
}
class Horse extends Ancestor{
String name;+
int age;
}
public class Animal {
public static void main(String[] args) {
Ancestor[] ani = new Ancestor[4];
ani[0] = new Cat0();
ani[1] = new Dog0();
ani[2] = new Mouse();
ani[3] = new Horse0();
for (int i = 0; i < ani.length; i++) {
ani[i].sleep();
}
}
}
package zoo;
public class Cat extends Ancestor { // public 필수!
public String name; // public 필수!
public int age; // public 필수!
}
package jun15;
import zoo.Cat02;
public class Human {
....
public static void main(String[] args) {
....
// 다른 패키지(zoo)에 있는 클래스(Cat) 호출
// Cat이 public class고 내부의 인스턴스 변수들도 public이여야 함
Cat tom = new Cat();
tom.sleep();
tom.name = "톰";
tom.age = 5;
// Dog dog = new Dog(); Error코드**
// dog.sleep();
}
}
** Error
다른 패키지에 있는 Dog 클래스를 불러오고 싶으면 Dog 클래스가 public일 때만 가능
(Dog 클래스가 public : 파일명과 클래스명이 같아야함! public 클래스는 하나!!!)
어쩌다보니 찾아서 정리하게된....참고!!
[ Extends 상속 ]
package zoo;
// extends (상속) __ 다시 배울예정
// 클래스를 부모-자식 관계로 연결 --> 자식의 클래스에 부모의 정보들이 생성
class Ancestor { // 동물들의 선조 (부모클래스) - 개, 고양이, 말, 쥐 (자식클래스)
void sleep() {
System.out.println("Zzzz");
}
}
class Dog extends Ancestor {
}
class Mouse extends Ancestor {
}
class Horse {
}
public class Animal {
public static void main(String[] args) {
// 동물들을 인스턴스화 해보기
Ancestor anc = new Ancestor();
Dog dog = new Dog();
Mouse mouse = new Mouse();
Horse horse = new Horse();
dog.sleep(); // Zzzz (Dog extends Ancestor - 상속시킴)
mouse.sleep(); // Zzzz (Mouse extends Ancestor - 상속시킴)
// horse.sleep(); // Error *
}
}
* Error : The method sleep() is undefined for the type Horse02
Ancestor (부모클래스)와 상속시킨 Dog, Mouse (자식클래스)는
Ancestor (부모클래스) 내부에 있는 기능인 메소드 sleep() 사용가능. --> 출력문 실행.
** 배우고 나면 다시 보기 **
상속을 하더라도 자식 클래스가 부모의 모든 것들을 물려받는 것은 아닙니다. 필드나 메소드의 접근제어자가 public이거나 protected일 때만 상속이 가능합니다.
[ Extends 상속 ] _ 같은 패키지 - 다른 파일인 경우
package zoo;
class Ancestor { // 동물들의 선조 (부모클래스) - 개, 고양이, 말, 쥐 (자식클래스)
void sleep() {
System.out.println("Zzzz");
}
}
public class Animal {
public static void main(String[] args) {
// 동물들을 인스턴스화 해보기
Ancestor anc = new Ancestor();
Cat cat = new Cat();
cat.sleep(); // 부모기능 실행가능
cat.name = "톰";
cat.age = 5;
System.out.println(cat.name); // 톰
System.out.println(cat.age); // 5
}
}
package zoo;
class Cat extends Ancestor {
String name;
int age;
}
Zzzz
톰
5
'국비과정 > JAVA' 카테고리의 다른 글
20230615 _[10일차]_04. Arguments & 메소드 특징 & 활용 (0) | 2023.06.18 |
---|---|
20230615 _[10일차]_03. 객체 지향 특징 & 활용 (0) | 2023.06.18 |
20230615 _[10일차]_01. 객체타입 및 참조 (0) | 2023.06.15 |
20230614 _[9일차]_04. 로또번호추첨_(여러개의 클래스) (0) | 2023.06.15 |
20230614 _[9일차]_03. 객체2 (0) | 2023.06.15 |