추상화 일상에서의 사용 예시 말을 추상적으로 이야기한다. 현실적이지 않은 것을 현실적인 것 마냥 말한다. 즉, 실체는 없지만 뭔가 구상은 있는 것을 추상화라고 합니다. 추상화가 나온이유? => 메소드 오버라이딩 때문 메서드에서 사용하는 예시 void abc(){ System.out.println(“a”); } void abc(); ------------------------------------------------------------------------ "추상화 되어있는 메소드가 있다" 추상화 된 메소드를 가지고 있다는 것은 객체화를 할 수 없다는 말. 추상화 되어 있는 메서드를 가질 수 있는 것 1. abstract class 2. interface 특히 중요한 것. 추상화가 있으면 필수적으로 상..
참조자료형 형변환 예제 package mega.backend_onemore.Day24; class A{ int a; } class B extends A{ int b; } class C extends A{ int c; } class D extends A{ int d; } public class ClassCastingTest1 { public static void main(String[] args) { A a = new B(); //업캐스팅 B b = (B)a; // 다운캐스팅 B[] listB = new B[10]; C[] listC = new C[10]; D[] listD = new D[10]; // 이렇게 세 번 수고할 필요가 없이 // 아래처럼 한방에 만들고 집어넣으면 된다! A[] listA = n..

참조자료형 형변환 - 상속이 있어야 할 수 있습니다. - 부모는 자식을 모른다는 걸 명심해야 한다. 객체는 자식, 자료형은 부모 이렇게 이렇게 만든다. 예시 Class C { int a; } Class D extends C{ int b; } C c = new D(); // 업 캐스팅 D d = (D)c; // 다운 캐스팅 보는 방법은, 변수 자료형 타입(기준)으로 보면 된다. D로 만들고 C로 갔다. => 내가 볼 수 있는 건 C밖에 없다. 그 말은 C일 때 int b가 안 보인다는 것. 다시 D로 다운캐스팅 해주면? int b가 보인다. 즉, 부모 입장에서는 부모에 있는 것만 보이는 것이고, 자식은 부모 것도 다 가지고 있으니까, 전부 보인다. 왜 쓰는가? 이러한 관계가 있다고 가정했을 때, Class..
super - 상속에서 부모의 것을 의미함. - 부모 클래스의 생성자를 자식 클래스 생성자에서 활용할 때 필요함. super() super는 상속받은 부모 클래스에 대한 레퍼런스 변수 => 부모 클래스 멤버에 접근할 때 사용하는 키워드 / 자식 클래스의 모든 생성자는 부모 클래스 생성자를 포함하고 있어야 하는데, 그렇지 않은 경우 자바 컴파일러가 사실 자동으로 부모 클래스의 기본 생성자를 호출해준다. (만약, 부모 클래스에 기본 생성자가 없다면, 에러 부모 클래스 super. > 부모생성자 부모클래스() // 부모의 생성자 super.abc() // 부모의 메소드 super.a // 부모의 멤버 변수 또 예시 class A { A(int a) { } } class B extends A { B() { su..

상속 - 일반적으로, 부모가 자식에게 물려주는 것. - 자식 입장에서는 부모 것을 가져오는 것. 통념상 부모가 자식보다 범위가 크다고 여기고 있지만, 그렇기는 하죠... 자바에서는 자식이 사이즈가 더 크다!!! 상속을 왜 쓰죠? - 코드 재사용성이 좋아집니다. - 부모의 것을 받아 쓰고 + 내것 을 추가 할 수 있습니다.(확장) (상속의 움직이는 단위는 무조건 class) : 일단 현재까지는. 매우 단순한 기본 형태 Class A{ // 부모 } Class B extends A{ // A클래스 자식 } 상속의 특징 1. 클래스를 체계화 할 수 있다. 2. 확장이 가능하다. 3. 기존 클래스의 기능을 쉽게 변경할 수 있다 => 오버라이딩 상속과 관련한 자바 언어의 특징 * 다중상속을 지원하지 않는다. * ..
오버로딩 - 생성자 또는 메소드에 해당 - 생성자명과 메소드명을 똑같이 하고 매개변수의 차이로 호출하는 구조를 만드는 것 - 리턴 타입은 무관하다 개발 => 생성 + 사용인데, 이 메서드 오버로딩 개념은 사용에 초점을 맞추는 것이다. 1. 메서드 오버로딩 ex. int add(int a, int b){ return a + b; } double add(double a, double b){ return a + b; } 이렇게 되어 있으면, main에서 메서드를 출력하려면 add(5,10) add(2.0,3.0) 이게 다 가능하다는 소리 ex2. 기준 : int add(int a, int b) 라고 하면 메서드 오버로딩 기준으로 double add(int c, int d) // X int add() // O ..
import java.util.Random; class Player { int num; //레인번호 String country; // 국가 int m; // 전진거리 Player(int num, String country) { // 생성자 => 레인번호, 국가 this.num = num; this.country = country; } void runAndCheck(int num, Random r) { // 이동거리(전진) 실행 메서드 // 밖에서 레인번호만 알려주면 된다. if (num != this.num) { //돌발 레인번호와 내 레인번호가 일치하지 않으면ㅇ m += r.nextInt(10) + 1; // 전진(전진거리에 이동거리만큼을 누적) } System.out.println(country + ..

코드 class C { int a; D d; } class D { String str; } public class HasTest { public static void main(String[] args) { C c = new C(); //1 c.d = new D(); // 2 c.d.str = "안녕하세요~~~"; //3 c.a = 10; //4 System.out.println(c.a +c.d.str ); // 5 } } C c = new C(); c.d = new D(); c.d.str = "안녕하세요~~~" c.a = 10; 따라서 System.out.println(c.a +c.d.str ); 는 10안녕하세요~~~ 출력.