기본 데이터형
int a = 10;
오브젝트 데이터형
- 주소값을 갖는 참조형 변수
Account ac1 = new Account();
ac1변수 -> Account 클래스에 있는 변수와 메소드에 대한 주소값을 갖는다.
Account ac2 = ac1;
- 참조형 변수를 대입한다.
자기참조
- 클래스 안에 자기 자신의 데이터 타입을 선언해 두고 그것을 참조로 하는 것
상속
- 기존 클래스를 확장해서 새로운 클래스를 만드는 기술
상위 클래스, 하위 클래스
class AA { ... }
class BB extends AA { ... }
상속과 생성자
- 자식 클래스가 생성될 때 먼저 부모 클래스를 자동 생성하고, 부모 클래스가 생성될 때 부모 클래스의 생성자가 여러 개 생성되더라도 부모 클래스의 디폴트 생성자를 통해서 자동 생성한다.
- 상속을 받앗을 땐 자식도 그렇지만 부모도 생성되야하고 부모를 호출해야하기 때문에 디폴트 생성자를 생성해줘야한다.
class AA { ...public AA(){}... }
class BB extends AA { ...super(" ");... }
-> AA 부모 클래스를 사용하고자 하는 생성자에서 super함수를 사용 해준다.
자식 클래스는 부모 클래스를 다 사용할 수 있다
필요한 것만 쓰기 위해서 객체를 주고 받고하는 것이다.
다형성
해당하는 클래스를 만들었지만, 실제적으로 사용하는 것은 원, 삼각형, 사각형이다.
ex> 도형(draw()) - 원(draw())
- 삼각형(draw())
- 사각형(draw())
Object - equals()
String - equals()
Object obj[] = { new String("abc"), new String("def") };
obj[0].equals("abc");
->오버라이딩 메소드만 접근 가능하기 때문에 위의 식은 false가 아닌 true가 나온다.
자바의 API는 모두 상속관계에 있고, 다형성으로 이루어져 있다.
오버라이딩
class car { ...speedUp(){ speed += 50; }...}
class truck extends car { ...speedUp(){ speed += 20; }...}
- 상속관계에 있는 클래스 안에서 부모의 메소드와 자식의 메소드가 리턴형, 메소드 이름, 인자의 갯수가 모두 같지만, 메소드의 내용이 다른 경우
형변환
A a = new A();
B b = new B();
자식 클래스가 바뀌면 부모 클래스는 묵시적으로 형변환된다.
class A extends B {
B b = new A(); }
=> A a = new A(); B b = a; }
총.정.리
class B {
String show(String n) {
//내용//
}
}
class A extends B {
A a = new A();
a.show(b);
String show(String n) {
/\내용/\ ->오버라이딩(새롭게 재정의하는 것)
}
void print() { }
B b = new A(); -> 형변환
b.show();
->오버라이딩 관계에 있는 것은 접근 가능하다.
b.print();
-> A클래스 안에만 있는 것 즉, 오버라이딩 관계에 있지 않은 것은 접근 불가능하다.
}
- 오브젝트의 형변환 -
Object obj[] = { new String("abc"), new Integer(1) };
String -> Object, Integer -> Object
=> 상위 클래스형으로 바뀌어졌다.
obj[0].equals();
-> equals는 오브젝트 안에만 있는 것이 아니라 String형 안에도 있어서 오버라이딩되기 때문에 true가된다.
obj[1].equals();
-> equals는 오브젝트 안에만 있는 것이 아니라 Integer형 안에도 있어서 오버라이딩되기 때문에 true가된다.
obj[1].parseInt();
-> object안에는 parseInt함수가 없어서 오버라이딩 되지 않는다.
하지만. obj[0].equals();식이 String -> Object -> String형으로 바뀌었기 때문에, obj[1].parseInt();이 식을 i = (Integer)obj[1]; 로 바꿔줄 수 있다.
형변환은 왜 쓸까요?
-> 여러 개의 데이터 타입을 가진 객체들을 하나의 공통 클래스에 묶어 주기 위해서..
상속의 의미
1. 자원의 의미
2. 내가 부모의 데이터 형으로 이름이 바뀔 수 있다.
추상메소드
- 자바에서 강제성을 띄우기 위해 꼭 구현하도록..
- 본체가 없는 메소드
abstract read();
read() { ... }
추상클래스
- 추상메소드를 1개 이상 포함하고 있는 클래스
abstract class A { ... }
인터페이스
- 다중 상속을 보완하기 위해서 만들어진 것
class A extends Applet implements Thread
->implement는 여러 개로 쓸 수 있다.
인터페이스로도 형변환이 가능하다.
final
- '클래스를 상속하지 않겠다.'는 뜻
알아두고 가기
1. 오버라이딩
2. object 형변환 -> 접근할 수 있는 메소드
묵시적 형변환 - 상위
명시적 형변환 - 하위
인위적으로 예외처리 발생
3. 다형성 -> 추상클래스, 인터페이스 구별 -> 추상메소드의 특징(강제성)
interface를 쉽게 이해하기
/*
* SpeakTest.java
*
* interface의 사용방법을 알기 위한 프로그램.
*
* by j.b.j
*/
/* interface의 선언. */
interface Speakable {
public String speak();
}
class Man {
private String name;
public Man(String name) {
this.name = name;
}
public String getName() {
return name;
}
}// end class Man
/* Speakable interface를 구현한 클래스*/
class Reader extends Man implements Speakable {
public Reader(String name) {
super(name);
}
/* Speakable의 메소드 구현. */
public String speak() {
return getName() + " 독자는 자바를 잘 하고싶다 ~~";
}
}// end class Reader
/* Speakable interface 를 구현한 클래스*/
class Worker extends Man implements Speakable {
public Worker(String name) {
super(name);
}
/* Speakable 의 메소드 구현. */
public String speak() {
return getName() + " 일꾼은 자기가 맡은 일을 열심히 한다~~";
}
}// end class Worker
/* Speakable interface 를 구현하지 않은 클래스*/
class Student extends Man {
public Student(String name) {
super(name);
}
public String speak() {
return getName() + " 학생은 공부를 열심히 한다~~";
}
}// end class Student
/* 메인 클래스 */
public class SpeakTest {
public static void main(String[] args) {
/* Object 배열을 생성한다. */
Object[] obj = { new Reader("길동"), new Worker("둘리"), new Student("마이콜")};
for(int i=0 ; i<obj.length ; i++) {
/* 객체 obj[i]이 Speakable을 구현한 객체라면... */
if(obj[i] instanceof Speakable) {
Speakable speaker = (Speakable) obj[i];
System.out.println(speaker.speak());
}
}
}
}// end
'Study > Java' 카테고리의 다른 글
[java] 예외처리, 정적필드 (0) | 2019.05.15 |
---|---|
[java] 상속, 인터페이스 실습 (0) | 2019.05.15 |
[java] for문의 활용 (0) | 2019.05.15 |
[java] 객체지향 실습 (0) | 2019.05.14 |
[java] 객체지향 (0) | 2019.05.14 |