어떠한 클래스로부터 만들어진 객체
class Calculation {
//오버로딩
int add(int x, int y, int z) {
return x + y + z;
}
int add(int x, int y) {
return x + y;
}
}
class Animal {
String name;
public Animal(String name) {
this.name = name;
}
public void cry() {
System.out.println(name + " is crying.");
}
}
class Dog extends Animal {
public Dog(String name) {
super(name);
}
//오버라이딩
@Override
public void cry() {
System.out.println(name+ " is barking.");
}
public void swim() {
System.out.println(name + " is swimming.");
}
}
public class Inheritance {
public static void main(String[] args) {
Dog dog = new Dog("coco");
dog.cry();
dog.swim();
Animal dog2 = new Dog("mimi");
dog2.cry();
// dog2.swim(); Animal에는 swim이 정의되지않아서 오류남
}
}
접근 제어자는 멤버 변수/함수 혹은 클래스에 사용되며 외부에서의 접근을 제한하는 역할
private : 같은 클래스 내에서만 접근이 가능
default(nothing) : 같은 패키지 내에서만 접근이 가능
protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능
public : 접근 제한이 전혀 없음
private(좁음) → default → protected → public(넓음)
abstract class Bird {
private int x, y, z;
void fly(int x, int y, int z) {
printLocation();
System.out.println("이동합니다.");
this.x = x;
this.y = y;
if (flyable(z)) {
this.z = z;
} else {
System.out.println("그 높이로는 날 수 없습니다.");
}
printLocation();
}
abstract boolean flyable(int z);
void printLocation() {
System.out.println("현재위치 { " + x + " ," + y + ", " + z + " }");
}
}
class Pigeon extends Bird {
@Override
boolean flyable(int z) {
return z < 10000;
}
}
class Peacock extends Bird {
@Override
boolean flyable(int z) {
return false;
}
}
public class Abstract {
public static void main(String[] args) {
// Bird bird = new Bird(); 추상메소드가 존재하므로 인스턴스를 만들 수 없다.
Bird pigeon = new Pigeon();
Bird peacock = new Peacock();
System.out.println("-----비둘기-----");
pigeon.fly(1,1,3);
System.out.println("-----공작새-----");
peacock.fly(1, 1, 3);
System.out.println("-----비둘기-----");
pigeon.fly(3, 3, 30000);
}
}
interface Flyable {
void fly(int x, int y, int z);
}
class Pigeon2 implements Flyable {
private int x, y, z;
@Override
public void fly(int x, int y, int z) {
printLocation();
System.out.println("이동합니다.");
this.x = x;
this.y = y;
this.z = z;
printLocation();
}
void printLocation() {
System.out.println("현재위치 { " + x + " ," + y + ", " + z + " }");
}
}
public class InterfacePractice {
public static void main(String[] args) {
Flyable pigeon = new Pigeon2();
pigeon.fly(1, 2, 3);
}
}