-(오늘, 내일 중요!)
-객체지향개념..frame work(sping,android,디자인패턴)..
[클래스-오후]
*객체지향 프로그램
*자바 객체지향 프로그래밍 특징 3가지
1. 캡슐화(Encapsulation)와 정보은폐(Information Hiding)
2. 상속(Inheritance)
3. 다형성(Polymorphysm)
-최소한의 간단한 프로그램을 짜고 적용!
-ex. 붕어빵
붕어빵 틀 : 클래스(설계도)
붕어빵 : 클래스를 가지고 메모리에 만들어낸 실체instance(객체란 단어..지양.."배에서배..")
클래스
인스턴스
x좌표, y좌표 2개 저장
=클래스 : 붕어빵 틀
package oop;
//x좌표, y좌표 2개 저장
//틀 생성
public class Point2D {
int x;
int y;
}
=인스턴스 : 붕어빵-클래스를 통해 메모리에 만들어진 각각의 실체
package oop;
public class PointTest {
public static void main(String[] args) {
Point2D pt = new Point2D(); // 메모리에 new키워드를 통해 인스턴스 생성, 이름을 붙인거
pt.x = 5; //실체에 접근
pt.y = 3;
System.out.println("x : "+pt.x);
System.out.println("y : "+pt.y);
}
}
-------------------------------------------------------------------
//캡슐화와 정보은폐
//ex.게보린 성분보단 기능(머리아플때먹지)만 알기
//자동판매기 입출력 확실, 어떤 로직인지 알 필요 없음, 보여줄 필요 없음
//접근제어자 public, private -> 내부 감추기,..
//x,y를 private로 감추고 set, get(저장, 값가져오기)기능만 부여해서
//그걸로 접근한다.(user입장)
//내부를 감추고 클래스에 어떤기능을 쓸건지 세팅
//main에서 기능을 가져다가 쓰기만 하면 된다.
package oop;
//x좌표, y좌표 2개 저장
//틀 생성
public class Point2D {
//정보은폐
private int x;
private int y;
//기능 구현
public int getX() {
return x;
}
//멤버변수에 값을 저장
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
-------------------------------------------------------------------
//상속 extends
//상속이란 개념은 확장이란 의미가 있어야 해, 뭔가가 발전되야 필요하지
//그래서 extends란 키워드를 쓴듯
//z좌표를 추가해서 만들어보자
package oop;
//상속을 받음
//super타입,부모 : 2D | child, 자식,sub타입 : 3D
public class Point3D extends Point2D {
}
package oop;
public class PointTest {
public static void main(String[] args) {
Point2D pt = new Point2D(); // 메모리에 인스턴스 생성, 이름을 붙인거
pt.setX(5); //실체에 바로접근
pt.y = 3;
System.out.println("x : "+pt.x);
System.out.println("y : "+pt.y);
}
}
//캡슐화와 정보은폐
package oop;
public class PointTest {
public static void main(String[] args) {
Point2D pt = new Point2D(); // 메모리에 인스턴스 생성, 이름을 붙인거
pt.setX(5); //실체에 바로접근X
pt.setY(3); //메소드를 통해 접근
System.out.println("x : "+pt.getX());
System.out.println("y : "+pt.getY());
}
}
//캡슐화와 정보은폐
----------------------------------------------------------------
package oop;
//상속을 받음
//super타입,부모 : 2D | child, 자식,sub타입 : 3D
public class Point3D extends Point2D {
//내부를 감추고
private int z;
//기능을 구현
public int getZ() {
return z;
}
public void setZ(int z) {
this.z = z;
}
}
package oop;
public class PointTest {
public static void main(String[] args) {
Point3D pt = new Point3D(); // 메모리에 인스턴스 생성, 이름을 붙인거
pt.setX(5); //실체에 바로접근X
pt.setY(3); //메소드를 통해 접근
pt.setZ(4);
System.out.println("x : "+pt.getX());
System.out.println("y : "+pt.getY());
System.out.println("z : "+pt.getZ());
}
}
//캡슐화와 정보은폐(== 캡슐화)
-----------------------------------------------------------------------------------------------------------------------//어제
------------------------------------------------------------------------------------------------------------------------------
1. 클래스와 인스턴스
class : Point2D
package oop2;
public class Point2D {
int x; //멤버변수 2개
int y;
}
class : PointTest
package oop2;
public class PointTest {
public static void main(String[] args) {
Point2D pt = new Point2D(); // 인스턴스생성(생성자), 클래스를 인스턴스 화 함
pt.x = 100; // 직접 접근
pt.y = 200;
System.out.println("x : " + pt.x + " y: " + pt.y);
}
}
2. 캡슐화
class : Point2D
package oop2;
public class Point2D {
private int x; //멤버변수 2개
private int y;
//private -> get,set이용
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
3. 상속
class : Point3D - 아무것도 없어도 상속받았으니 잘됨, 확장!!
package oop2;
public class Point3D extends Point2D {
}
package oop2;
public class Point3D extends Point2D {
private int z;
public int getZ() {
return z;
}
public void setZ(int z) {
this.z = z;
}
}
package oop2;
public class PointTest {
public static void main(String[] args) {
Point3D pt = new Point3D(); // 인스턴스생성(생성자)
pt.setX(100); // 직접 접근
pt.setY(200);
pt.setZ(300);
System.out.println("x : " + pt.getX() + " y: " + pt.getY() + " z :" + pt.getZ());
}
}
------------------------------------------------------------------------------------------------------------
3. 다형성 - 클래스와 클래스의 형변환
== 메소드 오버라이딩
class : Point2D
package oop2;
//super class - 먼저 만든거, 3D에 있는 Z를 출력X
public class Point2D {
private int x; //멤버변수 2개
private int y;
//private -> get,set이용
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public void print() {
System.out.println("x : " + this.getX());
System.out.println("y : " + this.getY());
}
}
package oop2;
//child class - 나중에 만든거
public class Point3D extends Point2D {
private int z;
public int getZ() {
return z;
}
public void setZ(int z) {
this.z = z;
}
//메소드
//pt.~ : 자기가 자기 이름 불러서..
//this라고 해야함
//메소드 오버라이딩 method overriding - 메소드 재정의
public void print() {
super.print();
//System.out.println("x : " + this.getX());
//System.out.println("y : " + this.getY());
System.out.println("z : " + this.getZ());
}
}
package oop2;
public class PointTest {
public static void main(String[] args) {
Point3D pt = new Point3D(); // 인스턴스생성(생성자)
pt.setX(100); // 직접 접근
pt.setY(200);
pt.setZ(300);
pt.print();
}
}
상속을안받으면 무조건 extends object가 상속된거
//toString
//업캐스팅
package oop3;
public class AnimalTest {
public static void main(String[] args) {
// Eagle eagle = new Eagle();
// System.out.println(eagle); //자동으로 toString이 생성되어 문자열이 출력됨
Bird bird = new Eagle(); //이글을 버드타입으로 참조 -> Upcasting
System.out.println(bird);
// Animal animal = new Eagle();
// System.out.println(animal);
Animal animal = bird; // => 재참조, 업캐스팅, 자동형변환
System.out.println(animal);
}
}
//다운캐스팅 - 강제 향변환
//Condor condor = new Eagle(); //이렇게는 안됨
Condor condor = (Condor) new Eagle(); //다운캐스팅,강제형변환 -> downcasting
//부모를 자식에서 참조하는 것 : 다운캐스팅
//->에러남, 처음부터 다운캐스팅 하면 안됨
그럼 어찌??
Animal animal = new Eagle();
System.out.println(animal);
Bird bird = (Bird) animal; //실체가 이글일때 업캐스팅을한 것부터 자기보다 위에 있는 것까지만
// 다운캐스팅이 가능 즉, 버드까지만 가능하다.
System.out.println(bird);
// instanceof => 미리 확인하는 연산자
Object object = new Tiger();
Object object = new Eagle(); -> 캐스팅 불가능
System.out.println(object); //upcasting, 무조건 Upcating 다된다.
if(object instanceof Tiger) {
System.out.println("Tiger로 캐스팅 가능");
}else {
System.out.println("Tiger로 캐스팅 불가능");
}
//Tiger tiger = (Tiger) object; //가지가 다르기때문에 업캐스팅 불가(자동타입에서)
//System.out.println(tiger); //원래 이글을 오브젝트로 업캐스팅을 하고 타이거로 다운캐스팅을
//하면 실행을 해야만 알아볼 수 있다. 이걸 미리 알아보는 연산자는
//object instanceof Tiger
//업캐스팅 다운캐스팅
package oop2;
public class PointTest {
public static void main(String[] args) {
Point2D pt = new Point3D(); //업캐스팅은 잘되는데 z에 접근이 안됨
//자식에서 새롭게 만든건 접근이 불가하다.
//원래물려준 2D까지는 접근이 가능하지만 3D에서 새롭게 만든건 X
pt.setX(100);
pt.setY(200);
//pt.setZ(300); //접근불가
Point3D pt2 = (Point3D) pt; //다운캐스팅
pt2.setX(100);
pt2.setY(200);
pt2.setZ(300); //원래3D꺼여서 접근이 가능하다.
pt.print();
}
}
'학부 정리 > Java' 카테고리의 다른 글
18.01.11 자바 - 필기01 미완성 (0) | 2018.01.11 |
---|---|
18.01.10 자바 - 필기02 (0) | 2018.01.10 |
[JAVA] 이클립스에서 ctrl+space 단축키 만들기 (0) | 2018.01.02 |
[자바복습] 6. 메소드 (0) | 2017.08.28 |
[자바복습] 5. 배열과 for-each (2) | 2017.08.27 |