클래스 배열은 객체를 여러개 선언해야 하는 경우 배열 타입으로 한번에 선언 후 사용한다.
클래스명 [] 배열명 = new 클래스명[길이]
클래스명 [] 배열명 = {
new 클래스명(),
new 클래스명2(),
....
}
배열명[index].필드(변수)명
배열명[index].메서드명()
클래스사용과 동일하게 항상
배열클래스명 = new 클래스명(); 으로 초기화 해야 heap메모리에 할당된다.
동물 클래스를 생성하고 동물의 공통 특징을 객체로 생성하여 생성자로 초기화하고 toString 값을 수정한다. 다른 종의 동물을 여러번 받아야 되니 클래스 배열을 이용해보자
편의상 패키지는 생략한다.
public class ArInstance{
}
class Animal{
String name;
int age;
String feed;
public Animal(){
//기본생성자
}
public Animal(String name, int age, String feed){
this.name = name;
this.age = age;
this.feed = feed;
}
@Override
public String toString(){
return "이름" +name + "\n나이 : " + age + "살\n먹이 : " + feed;
}
}
public class ArInstance{
}
public class ArInstance {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//길이가 3인 Animal의 클래스 배열선언
Animal [] arAni = new Animal[3];
//클래스를 초기화 하지 않아서 객체를 다시 초기화 해줘야한다.
String name = "";
int age = 0;
String feed = "";
//3번 반복해서 입력을 받자
for(int i =0; i<arAni.length; i++){
System.out.println(i + 1+"번 동물 이름 : ");
name=sc.next();
System.out.println(name + " 나이 : ");
age=sc.nextInt();
System.out.println(name + " 먹이 : ");
feed=sc.next();
//i 마다 name, age, feed가 들어가기 위해 new로 초기화한다.
arAni[i] = new Animal(name, age, feed);
}
//위 결과를 출력한다.
for (int i = 0; i < arAni.length; i++) {
System.out.println(arAni[i]);
}
}
위에서 클래스배열을 선언하고 나서 반드시 입력하거나 사용하기 전에는 반드시 배열명[i]를 newfh 초기화 해줘야한다.
가족구성원들을 적어보고 가족구성원들의 이름, 나이, 직업 순으로 출력하는 코드를 작성해 볼 것이다.
원리는 만들기(1)과 같다.
1.먼저 새로운 클래스파일을 만들고 기존 클래스 위에 클래스를 선언한다.
//새로운 클래스
class Family{
}
//아래, 최초 생성하면 자동으로 만들어지는 클래스
public class ArInstance3 {
}
class Family{
String name;
int age;
String job;
//기본 생성자
public Family(){
}
//생성자를 만들면 자동으로 만들어지는 생성자
public Family(String name, int age, String job){
super();
this.name = name;
this.age = age;
this.job = job;
}
}
...생략
public String toString() {
// TODO Auto-generated method stub
return "이름 : " + name + "\n 나이 : "+age+"\n직업 : "+job;
}
//위와 같이 만들면 사용하기 편리함.
public class ArInstance3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Family [] fa = new Family[2];
}
}
public class ArInstance3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Family [] fa = new Family[4];
String name = "";
int age = 0;
Stirng job = "";
}
}
for (int i = 0; i < fa.length; i++) {
System.out.println("이름 : ");
name = sc.next();
System.out.println("나이 : ");
age = sc.nextInt();
System.out.println("직업 : ");
job=sc.next();
for (int i = 0; i < fa.length; i++) {
System.out.println("이름 : ");
name = sc.next();
System.out.println("나이 : ");
age = sc.nextInt();
System.out.println("직업 : ");
job=sc.next();
fa[i] = new Family(name, age, job);
for(int i = 0; i <fa.length; i++){
System.out.println(fa[i]);
}
package day17;
import java.util.Scanner;
class Family{
String name;
int age;
String job;
public Family() {
// TODO Auto-generated constructor stub
}
public Family(String name, int age, String job) {
super();
this.name = name;
this.age = age;
this.job = job;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "이름 : " + name + "\n 나이 : "+age+"\n직업 : "+job;
}
}
public class ArInstance3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Family [] fa = new Family[4];
String name = "";
int age = 0;
String job = "";
for (int i = 0; i < fa.length; i++) {
System.out.println("이름 : ");
name = sc.next();
System.out.println("나이 : ");
age = sc.nextInt();
System.out.println("직업 : ");
job=sc.next();
fa[i] = new Family(name, age, job);
}
for (int i = 0; i < fa.length; i++) {
System.out.println(fa[i]);
//주소값을 출력함, 결과는 저장공간에 담아서 출력해야함
// 단, toString return 값을 오버라이드 시키면 원하는 결과 출력가능
}
}
}