Java (54) 썸네일형 리스트형 인터페이스 & 추상 클래스 클래스 -> 전부 메소드로 구성 추상 클래스 -> 추상 메소드를 포함 new 불가 인터페이스 ->전부 추상 메소드로만 구성 인터페이스의 모든 변수는 상수가 됨. new 불가 객체의 명세. 인터페이스는 class 위치에 interface로 적음 abstract없이도 내부 모든 메소드는 추상메소드임. 인터페이스 상속은 extends 대신 implements 사용 상속받은 클래스가 인터페이스의 일부만 구현하는 경우 class 앞에 abstract 키워드 붙음 인스턴스를 상속받은 클래스가 인스턴스의 모든 메소드를 구현하면 new 가능인데 아니면 abstract 붙혀야 하고, 추상 클래스로 빠짐. 따라서 이 추상 클래스를 다시 상속받아서 전부 구현한 클래스만이 new로 인스턴스화 가능. 클라이언트는 인터페이스를 .. 자바 연습 (상속& 업캐스팅) 업 캐스팅 한 인스턴스의 오버라이드된 함수에 대해서 하위 클래스의 함수가 호출 된다. 가상 메소드 개념. 업 캐스팅 인스턴스는 하위 클래스에만 존재하는 메소드나 변수에는 접근 불가능. -> 다운캐스팅 필요 public class Customer { protected int ID; protected String Name; public int bonusPoint; protected String Grade; public Customer(String Name, int ID,String gr) { this.Name = Name; this.ID = ID; this.Grade = gr; bonusPoint = 10000; } public Customer(String Name, int ID) { this.Name = .. 자바 연습 (추상 클래스) public abstract class Car { public abstract void drive(); public abstract void stop(); public abstract void start(); public abstract void turnoff(); final public void run() { start(); drive(); stop(); turnoff(); } } public class Avante extends Car{ @Override public void drive() { // TODO Auto-generated method stub System.out.println("아반타 주행시작"); } @Override public void stop() { // TODO Auto-gene.. final 키워드 사용 재정의 해서는 안되는 매소드 final 키워드를 붙힘. 이를 테면 시나리오 메소드 class에 final이 붙으면 누군가에 의해 상속될 수 없음 final로만 이루어진 class는 new 인스턴스화 없이 바로 클래스 이름으로 참조해서 사용가능. => static이랑 비슷한 개념. abstract는 모든 하위클래스가 이것을 구현해야함. 그것이 아니고 그냥 public으로 한다면 오버라이딩으로 새롭게 써서 쓸 하위 클래스만 쓰면 됨. 추상 클래스 & 추상 메소드 추상 메서드 -> 구현 코드가 없이 선언부만 존재하는 메소드. 추상 클래스-> 추상 메서드를 포함한 클래스, new로 인스턴스화 불가능 추상클래스가 new로 인스턴스화 될 수 없는 이유는 추상 클래스로 만든 인스턴스는 추상 메소드를 호출할 수 있어야 하는데 그것은 구현되지 않은 메소드이므로 안됨. 따라서 하위 클래스로 다운캐스팅 해줘야 한다. public void xx(); public void xx(){} ->이거는 추상아님. public abstract void xx(); 이렇게 표현 해 줘야 하고 이것은 하위 클래스에서 정의 될것임. 추상 메소드를 포함하는 클래스는 class 앞에 abstract 붙혀야 함. 추상 메서드 사용이유 -> 오버라이드는 상위클래스에서도 가능한 메서드인 경우, 하위 클래스.. down casting & instanceof 다운캐스팅 -> 업캐스팅 하면 하위 클래스만 가지고 있는 메서드나 변수들은 사용 불가능하고 상위 클래스의 메서드를 오버라이딩 한것만 사용 가능하므로 하위 클래스의 특징을 살리고 싶으면 다운 캐스팅 해줘야 함. hAnimal을 하위 클래스 Human 생성자로 인스턴스 생성했을 때, 다운 캐스팅은 Human에 대해서만 해야 함. Human human =(Human) hAnimal; 근데 컴파일에는 다른 하위클래스에 대해서도 Eagle human =(Eagle) hAnimal; 이 컴파일은 됨. 하지만 오류는 뜸 따라서 각 케이스를 분석 하기 위해서는 instanceof사용. if (hAnimal instanceof Human) { } 맞으면 true return; 따라서 instanceof 사용하는게 안정적. 다형성 , 형 변환 다형성 -> 하나의 코드가 여러 자료형으로 구현되서 실행되는 것. 다형성을 이용하면 상위 클래스를 상속받은 하위 클래스 여럿이 상위클래스의 동일한 메소드를 오버라이딩 했다면, 예를 들어 human , tiger ,eagle이 Animal을 상속 받고 Animal의 메소드 move를 각각 override했다면 public void animalmove (Animal animal) { animal.move(); } Animal h = new human() Animal t = new tiger() Animal e = new eagle() 하고 저 매개변수에 h,t,e를 각각 넣어 주는 것으로 다른 move를 호출 가능. 다형성을 사용하지 않는다면 각각의 타입으로 각각의 함수를 만들어야 함. 묵시적 형변환 Cus.. up casting & override 상위 클래스를 하위클래스의 생성자로 생성하는 경우 묵시적으로 이루어짐. 하위 클래스의 타입은 상위 클래스의 타입으로 형변환 가능 -> 업캐스팅 but 역은 성립 안됨. 상위 클래스로 형변환 되면 하위 클래스의 메소드나 변수는 상위클래스의 메소드만 보임. Customer vc = new VIPCustomer(); 한 경우에 vc에게는 Customer의 메소드만 보이지만 vc.calcPrice(1000); 실행시 실행되는것은 VIPCustomer의 calcPrice이다. 상위클래스의 메소드가 하위클래스에서 필요한 내용과 맞지 않는 경우 재정의 가능 ->오버라이딩. 오버로딩 -> 메소드 이름은 같은데 매개변수 포맷이 다른거. @Override -> 컴파일러에게 오버라이드 된 메소드라는 것을 보여줌 이때 상위 .. 이전 1 2 3 4 5 6 7 다음