[Java] 추상 클래스, 추상 메서드(abstract)
·
Java
추상 클래스(abstract class): 미완성 메서드(추상 메서드)를 포함한 클래스 (미완성 설계도)- 추상메서드가 있기때문애 상속통해 구현 해주어야 한다.- 다른 클래스 작성에 두움주기 위한것으로 인스턴스 생성 불가    -> 상속 통해 추상메서드 구현 후 인스턴스 생성 가능abstract class 클래스이름{ } 추상 메서드(abstract method): 선언부만 작성하고 구현부는 작성하지않은 메서드 (미완성 메서드)- 꼭 필요하지만 자손마다 다르게 구현될 경우 씀.abstract 리턴타입 메소드이름();  abstract class AbstTest{ abstract void method1(); abstract void method2(); //객체생성불가}class Test extends A..
[Java] 매개변수의 다형성
·
Java
class Clothes { int price; Clothes(int price){ this.price = price; }}class Shirt extends Clothes{ Shirt(){ super(8000); //조상 생성자 호출 }}class Pants extends Clothes{ Pants(){ super(12000); }}class Buyer { long money = 20000; -------- void buy(Shirt s){ money = money - s.price; } void buy(Pants p){ money = money - p.price; } -------- //제품 추가마다 메서드 만들어 줘야..
[Java] 다형성(Polymophism), 참조변수 형변환, instanceof연산자
·
Java
다형성 (Polymophism): 조상클래스 타입의 참조변수로 자손 클래스의 인스턴스 참조,다룰수 있도록 한 것public class Parent { int x = 10; public void parentMethod(){ ... }}public class Child extends Parent{ int y = 20; public void childMethod(){ ... }}//원래 참조변수타입 = 객체타입 이지만Parent p = new Parent();Parent p = new Child(); //조상타입 참조변수로 자손인스턴스 참조//다만, 조상참조변수는 자손인스턴스 중 상속받은 조상 멤버만 사용가능p.childMethod(); //에러p.p..
[Java] 제어자, 지정자(modifier), 캡슐화
·
Java
제어자, 지정자 :클래스, 클래스멤버(변수,메서드선언부)에 사용되어 부가적 의미 부여함. 접근 지정자 : public, protected, (default), private //넷 중 하나만 선택가능 그외 지정자 : static, final, abstract, native, transient, synchronized, volatile, strictfp //복수선택 가능 접근지정자(Access Modifier) :사용(접근) 권한 지정 - 기준 : 패키지, 클래스 - 선언 : 클래스, 멤버변수, 멤버메서드, 생성자 4가지 중에서 한개만 선언 가능(중복 선언 불가) 1. public - 제한x, 어디에서든 사용 가능 2. protected - 같은 패키지 내에서만 사용 가능 - 단, 상속 관계에서는 다른 패..
[Java] Object 클래스, super, super()
·
Java
Object 클래스 :모든 클래스의 조상 - 부모 없는 클래스 자동적 Object 클래스 상속받음 - 모든 클래스는 Object 클래스에 정의된 11개의 메서드(toString(),equals()..등등) 상속받음. class Test{ //→ class Test extends Object 컴파일러 자동추가 } super :객체 자신을 가르키는 참조변수 (≒ this) - 조상멤버와 자신멤버 구별할 때 사용 - 인스턴스 멤버내에만 존재 public class Parent { int x = 10; } public class Child extends Parent{ int x = 20; public void play(){ System.out.println(x); //20 ,가까운 쪽 System.out.pri..
[Java] 오버라이딩(OverRiding)
·
Java
오버라이딩(OverRiding) : 상속 받은 부모의 메서드를 자기 자신에 맞게 내용을 재정의,변경 하는 것. public class Parent { int x = 10; int y = 20; public void play(){ retunr x+ ":" +y; } } public class Child extends Parent{ int z = 30; public void play(){ //오버라이딩 {}구현부만 수정가능 retunr x+ ":" +y+ ":" +z; } } 오버라이딩 조건 1. 선언부(반환타입, 메서드이름, 매개변수) 조상메서드와 일치 2. 접근제어자 조상클래스 메서드보다 좁은 범위로 변경x 3. 예외는 조상클래스의 매서드보다 많이 선언할 수 x 접근제어자,예외 나중자세히.. 오버로딩 v..
[Java] 상속(Inheritance), 포함(composite)
·
Java
상속 : 기존 클래스에서 새 클래스 작성(코드 재작용성) - 두클래스 부모,자식 관계 맺음 부모로 부터 자식에게 상속 - 부모클래스(super class)의 멤버들을 자식클래스(child class)에서 자기가 선언한 것 처럼 사용하려 하는것 - 클래스간의 공통요소(멤버)가 있다면 공통요소를 부모클래스로 작성 후 자식 클래스가 상속(확장) 해서 사용 - java는 단일 상속만 허용 (충돌방지) - 자손은 조상의 모든 멤버 상속받음(생성자,초기화 블럭 제외) - 자손 멤버 수 ≥ 조상 멤버 수 → 조상보다 적을 수x - 자손 변경 조상 영향x class 자식클래스 extends 부모클래스{ } public class Parent { //멤버수 :2 [x, play()] int x = 10; public v..
[Java] 변수 초기화(명시적, 생성자, 초기화블럭)
·
Java
*멤버변수(iv,cv) 자동 기본값 초기화 but 지역변수 반드시 사용 전 초기화 필수! 왜? 메서드는 그 영역 쓰고 말기 때문에 쓸때마다 덮어쓰는 방식이라 전에 뭐들었는지 몰라서.. *변수타입별 기본값 boolean - false 정수형 - 0 실수형 - 0.0 참조형 - null 1. 명시적 초기화 : = 대입연산자, 간단 초기화 int x = 10; //기본형 초기화 Test t = new Test(); //참조형 초기화 2. 초기화 블럭 class Test{ static{ 클래스 초기화 블럭 } //cv초기화, 클래스 메모리 처음 로딩될 때 한 번만 수행 { 인스턴스 초기화 블럭 } //iv초기화, 인스턴스 생성할 때 마다 수행 } 3. 생성자 https://bbbpp.tistory.com/73 ..
[Java] this(), this
·
Java
생성자 this() : 생성자에서 다른 생성자 호출 (코드 중복 제거 위해 호출) 1. 조건 - 클래스이름 대신 this 사용 - 다른 생성자 호출시 꼭 첫줄에서만 가능! Test(String sb){ score=91; Test(sb, "가", 88); //에러. Test대신 this써야함, 첫줄x } 2. 예 public class Test { String subject; String type; int score; //1. Test(){ this("수학", "가", 85); //3. 호출 }; //2. Test(String subject){ this(subject, "가", 85); //3. 호출 } //3. Test(String subject,String type,int score){ this.sub..
[Java] 생성자(Constructor)
·
Java
생성자(Constructor): 객체 생성시마다  딱 한번 호출되는 특수한 메서드(인스턴스 초기화 메서드)-주로 객체 생성시 인스턴스 변수 초기화에 사용 or 객체 생성시 실행할 작업 있을 때 사용-모든 클래스는 반드시 하나 이상의 생성자가 있어야 함. (클래스 만들때 기본생정자 넣는 습관 들이기!!)-클래스 내에 생성자가 없으면 컴파일러가 기본 생성자를 만들어 줌.-단, 개발자가 하나 이상의 생성자를 선언하면 컴파일러는 기본 생성자를 만들지 않음class Test{ Test(){ //기본생성자(매개변수 없는 생성자) ... } Test(int num){ //매개변수 있는 생성자 ... } →생성자 오버로딩}Test t = new Test(); ..