배열이나 컬렉션의 모든 요소를 이용하여 반복 작업을 수행할 수 있도록 만들어진 반복문
for( [요소의 데이터타입 or 부모의 데이터 타입도 가능] [변수명] : [배열 or 컬렉션] ) {
//for에서 선언한 변수를 활용하는 코드
}
👀example
int[] arr = {1, 2, 3}
for(int n : arr) {
System.out.println( n );
}
👇🏻
for(int i=0; i<arr.length; i++) {
System.out.println( arr[i] );
}
한 요소가 다양한 모습으로 표현되거나, 다양한 기능을 수행하는 용어 👉🏻 객체지향 언어의 특징
👀example
<부모타입 객체변수에 자식타입 인스턴스 대입>
Parent p;
p = new Child1();
p = new Child2();
p = new Child3();
public void out( Parent p ) { //부모타입 객체변수
}
public void out( new Child1() ); //자식타입 인스턴스 대입
public void out( new Child2() );
public void out( new Child3() );
✔ 추상메소드를 가지려면 추상클래스가 되어야 하지만, 추상클래스가 되기위해 추상메소드가 있어야하는 것은 아님
__✔ 구현부가 필요없는 부모클래스의 메소드는 abstract를 붙여 중괄호를 생략할 수 있음 👉🏻 실체가 없는 추상화된 메소드 👉🏻 추상화된 메소드를 가진 추상화된 클래스는 인스턴스(실체화)를 할 수 없음
동작(실행)코드를 구현하지 않고 추상화시킨 메소드
[접근제한자] abstract [리턴타입] 메소드명 (매개변수);
; (세미콜론)으로 끝냄정의부 : 메소드 머리, Method Head / 메소드 정의코드의 첫 줄로, 메소드의 동작방식, 사용방법을 알 수 있음구현부 : 메소드 몸체, Method Body / 메소드가 호출되었을 때 실행할 코드를 작성하는 중괄호 영역[접근제한자] abstract class [클래스명] {
}
👀example
public abstract void class Parent() {
}
public void Child() {
}
Parent p = new Child();
------------------------------------------------
//객체를 생성할 수 없는 추상클래스
public abstract class Person {
protected String name;
public Person(String name) {
this.name = name;
}
//실행할 수 없는(실행할 구현부가 없는) 추상메소드
public abstract void display();
}
----------------------------------------------
public class Proffesor extends Person {
private String major;
//디폴트 생성자
//public Proffesor() {
// super(); 👉🏻 현재 부모클래스에서 작성된 디폴트 생성자가 없어서 오류
//}
public Proffesor(String name, String major) {
super(name);
this.major = major;
}
👉🏻 Person은 객체생성을 못해 초기화가 불가능 하므로 자식클래스의 생성자를 통해 부모의 멤버필드를 함께 초기화
➡ 원래는 인스턴스를 생성하면서 ( new Person(name) ) 초기화
public void display() {
System.out.println( name + major);
}
👉🏻 부모의 추상메소드 구현