2018. 1. 18. 21:27
자바 추상클래스 final 알아보기 C. Java2018. 1. 18. 21:27
다형성을 위해 추상클래스를 사용한다.
추상 클래스
: 객체를 생성할 수 없는 클래스 abstract 을 class 앞에 기술해야한다.
: 객체를 생성할 수 없는 클래스 abstract 을 class 앞에 기술해야한다.
추상클래스는 일반메소드나 속성, 상수들을 가질수 있다.
하지만 추상클래스의 일반 메소드나 속성은 서브 클래스에서 반드시 오버라이딩해야만 객체를 생
성하여 사용할수 있다.
성하여 사용할수 있다.
추상 메소드
: 내용을 갖지 않는 메소드로 메소드 앞에 abstaract를 붙여야한다.
추상 메서드는 추상클래스를 상속받는 서브 클래스에서 어떻게 동작할지 반드시 구현되어야 한다.
추상메서드는 추상클래스만이 가질수 있다.
ex) abstract class A { //추상클래스
abstract void method1(); //추상메소드
void method2(){ System.out.println("그냥 메소드");}
}
class Sub extends A {
//서브클래스에서 추상메소드를 오버라이딩 하지 않으려면 서브 클래스 역시 상클래스여야 한다.
//서브클래스에서 추상메소드를 오버라이딩 하지 않으려면 서브 클래스 역시 상클래스여야 한다.
void method1(){ System.out.println("추상메소드 재정의");}
//추상메소드를 반드시 오버라이딩 해야한다.
//추상메소드를 반드시 오버라이딩 해야한다.
}
class AMain { //추상클래스
public static void main(String[] args){
public static void main(String[] args){
Sub ss = new Sub(); //추상클래스의 상속을 받은 서브 클래스로 객체 생성
ss.method1; // 추상 메서드를 서브 클래스에서 오버라이딩하였기때문에 사용가능
ss.method2; // 추상 클래스에서 구현한 메서드를 상속받아 사용함
}
}
업캐스팅을 사용한 다형성 제공
추상클래스와 업캐스팅 : 추상클래스로 레퍼런스 변수를 선언할수 있고, 이 변수는 업캐스팅이 가능하다. 그래서 서브 클래스로 생성한
객체를 참조하는 용도로 사용된다.
ex) abstract class Sc { abstract void draw(); }
class Circ extends sc{ void draw(){ System.out.println("원그리기로 재정의") }
class Rect extends sc{ void draw(){ System.out.println("사각형그리기로 재정의") }
public class ScMain(){
punlic static void main(String[] args){
sc ref;
ref = new Circ(); //업캐스팅
ref.draw(); //->원을그린다.
ref = new Rect(); //업캐스팅
ref.draw(); //->사각형을 그린다.
}
}
final => 변수 앞에 붙이면 : 변수를 상수화 시킨다 (변수에 저장된값이 변하지 않음)
메서드 앞에 붙이면 : 서브 클래스에서 오버라이딩 하는것을 허락하지 않음
클래스 앞에 붙이면 : 더이상 상속을 허락하지 않음
ex) class Exam_03{
private final double pi = 3.141592;
public double getPi(){
return pi;
}
}
public class exam_main {
public double getPi(){
return pi;
}
}
public class exam_main {
public static void main(String[] ar){
Exam_03 es = new Exam_03();
System.out.println( es.getPi() );
final int x= 100;
System.out.println( es.getPi() );
final int x= 100;
......
.......
}
}
.......
}
}
'C. Java' 카테고리의 다른 글
VI 편집기 명령어 (0) | 2020.12.15 |
---|---|
Controller.java (0) | 2017.07.02 |
java 자바 자료모음 (0) | 2017.07.02 |
java 자바 자료형 (0) | 2017.07.02 |
java 자바 path 설정 (0) | 2017.07.02 |