접근제어자
public void publicMethod(){
System.out.println(publicVar);
}
protected void protectedMethod(){
System.out.println(protectedVar);
}
void defaultMethod(){
System.out.println(defaultVar);
}
private void privateMathod(){
System.out.println(privateVar);
}
public static void main(String[] args) {
AccessModifier am = new AccessModifier();
System.out.println(am.publicVar);
am.publicMethod();
System.out.println(am.protectedVar);
am.protectedMethod();
System.out.println(am.defaultVar);
am.defaultMethod();
System.out.println(am.privateVar);
am.privateMathod();
접근제어자를 사용하는 이유
Time 클래스
package g_oop2;
public class Time {
private int hour;
private int minute;
private int second;
public int getHour() { //getter 어떤 변수의 값을 얻기 위해 사용
return hour;
}
public void setHour(int hour) { //setter 변수에 값을 저장할 때 사용(값을 받을 파라미터도 있음!)
if(hour < 0){
this.hour = 0;
}else if(23 < hour){
this.hour = 0;
}else{
this.hour = hour;
}
}
public int getMinute() {
return minute;
}
public void setMinute(int minute) {
if(minute < 0){
this.minute = 0;
}else if(59 < minute){
this.minute = 0;
setHour(hour+1);
}else{
this.minute = minute;
}
}
public int getSecond() {
return second;
}
public void setSecond(int second) {
if(second < 0){
this.second = 0;
}else if(59 < second){
this.second = 0;
setMinute(minute+1);
}else{
this.second = second;
}
}
void clock(){
while(true){
System.out.println(toString());
stop();
setSecond(second+1);
}
}
private void stop(){ //clock을 구현하기 위해 부수적으로 만든 메서드
try {
Thread.sleep(1000); //프로그램을 잠시동안 멈출 수 있게 하는 메서드
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override // 상속받은 메서드 내용 변경
public String toString() { //Object 클래스의 toString 메서드 상속받음
return hour + ":" + minute + ":" + second;
}
}
추상클래스
추상메서드
public abstract class SampleAbstractParent {
void method(){
System.out.println("내용");
}
abstract void abstractMethod();
}
class SampleAbstractChild extends SampleAbstractParent {
@Override
void abstractMethod() {
System.out.println("내용");
}
}
Animal 클래스에 동물소리를 내는 메서드 만들기
(메서드를 선언부만 만들고, 동물 이름은 지정한 클래스들에 상속한다.)
public abstract class Animal {
abstract void sound();
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍!!");
}
}
class Cat extends Animal {
@Override
void sound() {
System.out.println("야옹!!!");
}
}
class Tiger extends Animal {
@Override
void sound() {
System.out.println("어흥!!!!");
}
}
인터페이스
클래스와 같은 하나의 데이터
클래스는 세부 내용이 있지만, 인터페이스는 틀만 존재
상수랑 추상메서드만 존재하고 일반적인 변수와 메서드는 넣을 수 없다. (상수 : 값을 변경할 수 없는 변수)
인터페이스의 모든 멤버변수는 public static final 제어자를 사용해야 한다.
public static final int NUM1 = 1;
변수앞에 final을 붙이면 상수가 되고, 변수의 값을 변경하지 못하게 만든다.
상수의 이름은 전부 대문자를 사용한다.
모든 멤버변수의 제어자가 같기 때문에 생략이 가능하다.
int NUM2 = 2;
인터페이스의 모든 메서드는 public abstract 제어자를 사용해야 한다.
public abstract void method1();
모든 메서드의 제어자가 같기 때문에 생략이 가능하다.
void method2();
class SampleImplement implements SampleInterface, SampleInterface2 {
@Override
public void method1() {
}
@Override
public void method2() {
}
@Override
public void method3() {
}
}
interface SampleInterface2{
void method1();
void method3();
}