Ex)
class Parent {
private int a = 10;
public int b = 20;
}
class Child extends Parent {
public int c = 30;
void display() {
// System.out.println(a); // 상속받은 private 필드는 참조 불가능
System.out.println(b);
System.out.println(c);
}
}
public class Java100_variable_HelloJava {
public static void main(String[] args) {
Child ch = new Child();
ch.display();
}
Ex)
class Parent {
int a = 10;
}
class Child extends Parent {
int a = 20;
void display() {
System.out.println(a);
System.out.println(this.a);
System.out.println(super.a);
}
}
public class Java100_variable_HelloJava {
public static void main(String[] args) {
Child ch = new Child();
ch.display();
}
}
//결과
20
20
10
Ex)
class Parent {
int a;
Parent() {
a = 10;
}
Parent(int n) {
a = n;
}
}
class Child extends Parent {
int b;
Child() {
// super(40);
b = 20;
}
void display() {
System.out.println(a);
System.out.println(b);
}
}
public class Java100_variable_HelloJava {
public static void main(String[] args) {
Child ch = new Child();
ch.display();
}
}
//결과
10
20
//주석 해제 시
40
20
Ex)
class Parent {
void display() {
System.out.println("부모 클래스의 display() 메소드입니다.");
}
}
class Child extends Parent {
void display() {
System.out.println("자식 클래스의 display() 메소드입니다.");
}
}
public class Java100_variable_HelloJava {
public static void main(String[] args) {
Parent pa = new Parent();
pa.display();
Child ch = new Child();
ch.display();
Parent pc = new Child();
pc.display();
}
}
class Parent{ ... }
class Child extends Parent{ ... }
1. Parent pa = new Parent(); // 허용
2. Child ch = new Child(); // 허용
3. Parent pc = new Child(); // 허용
4. Child cp = new Parent(); // 오류 발생
Ex)
class Parent{ ... }
class Child extends Parent{ ... }
class Brother extends Parent{ ... }
Parent pa01 = null;
Child ch = new Child();
Parent pa02 = new Parent();
Brother br = null;
pa01 = ch; // pa01 = (Parent)ch; 와 같으며, 타입 변환 생략 가능
br = (Brother)pa02; // 타입 변환 생략 불가능
br = (Brother)ch; // 직접적인 상속 관계가 아니므로 오류 발생
class Parent { }
class Child extends Parent { }
class Brother extends Parent { }
public class Java100_variable_HelloJava {
public static void main(String[] args) {
Parent p = new Parent();
System.out.println(p instanceof Object); // true
System.out.println(p instanceof Parent); // true
System.out.println(p instanceof Child); // false
System.out.println();
Parent c = new Child();
System.out.println(c instanceof Object); // true
System.out.println(c instanceof Parent); // true
System.out.println(c instanceof Child); // true
}
}
// 결과
true
true
false
true
true
true
Ex)
abstract class Animal {
abstract void cry();
}
// 이런 형식으로 추상 클래스, 추상 메소드 생성
class Cat extends Animal {
void cry() {
System.out.println("냐옹냐옹!");
}
}
class Dog extends Animal {
void cry() {
System.out.println("멍멍!");
}
}
public class Java100_variable_HelloJava {
public static void main(String[] args) {
// Animal a = new Animal() // 추상 클래스는 인스턴스 생성 불가능
Cat c = new Cat();
Dog d = new Dog();
c.cry();
d.cry();
}
}
접근제어자 interface 인터페이스이름 {
publlic static final 타입 상수이름 = 값;
public abstract 메소드이름(매개변수목록);
}
interface Animal {
public abstract void cry();
}
class Cat implements Animal {
public void cry() {
System.out.println("냐옹냐옹");
}
}
class Dog implements Animal {
public void cry() {
System.out.println("멍멍!");
}
}
public class Java100_variable_HelloJava {
public static void main(String[] args) {
Cat c = new Cat();
Dog d = new Dog();
c.cry();
d.cry();
}
}
interface Animal {
public abstract void cry();
}
interface Pet {
public abstract void play();
}
class Cat implements Animal, Pet {
public void cry() {
System.out.println("냐옹냐옹");
}
public void play() {
System.out.println("쥐 잡기 놀이하자");
}
}
class Dog implements Animal, Pet {
public void cry() {
System.out.println("멍멍!");
}
public void play() {
System.out.println("산책가자");
}
}
public class Java100_variable_HelloJava {
public static void main(String[] args) {
Cat c = new Cat();
Dog d = new Dog();
c.cry();
c.play();
d.cry();
d.play();
}
}
Ex)
class Outer { // 외부 클래스
class InstanceInnerClass {} // 인스턴스 클래스
static class StaticInnerClass {} // 정적 클래스
void myMethod () {
class LocalInnerClass {} // 지역 클래스
}
}
// 익명 클래스는 선언과 동시에 생성하여 참조변수에 대입함
클래스이름 참조변수이름 = enw 클래스이름() {
// 메소드의 선언
}
try {
// 예외를 처리하길 원하는 실행 코드;
} catch( e1 ) {
// e1 예외가 발생할 경우에 실행될 코드;
} catch( e2 ) {
// e2 예외가 발생할 경우에 실행될 코드;
}
finally {
// 예외 발생 여부와 상관없이 무조건 실행될 코드;
}