추상클래스는 추상메서드를 포함하는 클래스이다. 일반적인 클래스는 객체를 생성하기 위한 목적으로 작성이 된다. 추상적인 내용이 포함되면, 객체화를 할수가 없다. 추상 클래스는 생성자를 통하여 직접 객체를 생성 할 수 없다.
예시)
예시) 추상 클래스를 상속받는 서브 클래스
서브 클래스에서는 상속받은 추상클래스의 추상메서드를 오버라이딩하여 해당 클래스에 필요한 내용으로 정의 하면 된다.
<추상 클래스에서의 접근제한자>
예시)
그리고 메인문 아래에 메세지 버튼 클래스의 객체를 생성해주고 슈퍼클래스의 메서드인 클릭을 실행하면 다시 오버라이딩 된 자기 자신의 온클릭 메서드를 실행하게 되어 Hello, world가 출력이 된다.
예시)
Test3 라는 인터페이스를 만들고 멤버 필드 n1 과 n2를 정의해두었다. n1에는 안적혀 있지만 인터페이스의 필드는 모두 public static final 이다. 스테틱의 특징인 기울임체(이탤릭체)와 파이널의 특징인 굵은글씨(볼드체)가 적용되어져 있다.
인터페이스도 추상메서드의 틀만 정의하고 바디는 생략한다. void method1(); 이 추상 메서드이다.
method2는 스태틱 메서드이다.
인터페이스 Test3를 임플리먼트한 Test4 클래스에는 추상 메서드를 오버라이딩 하여 정의해준다.
메인문에서는 Test4 클래스를 이용한 객체를 생성해주면. 그 객체로 오버라이딩한 메서드를 실행할수있다. 인터페이스도 추상클래스가 그랬듯이 직접적인 생성자를 통한 객체 생성이 불가능하다.
추상클래스는 생성자를 이용한 객체를 직접 생성할수는 없지만, 익명 내부 클래스를 이용한 객체 생성은 가능하다. 인터페이스의 미완성된 내용을 자신이 직접 내부에서 이름이 없는 클래스를 이용하여 인터페이스를 구현하여 객체를 생성하는것이다.
예시)
interface로 USB를 만들고. 이를 임플리먼트 하는 클래스들 { PowerChargeCable, PortableSSD, Speaker} 만들고 각 클래스에 추상 메서드들을 알맞게 오버라이딩하였다.
그리고 PC 라는 클래스에서는 반환형이 없는 메서드를 만들어서 메개 변수를 USB 타입으로 받도록 하고 USB의 action 함수를 호출하도록 선언하였다.
메인문 아래에는 각 클래스들을 객체로 만들어두고 pc의 connect 함수에 각 객체들을 대입시켜주면 오버라이딩 된 메서드들이 실행이 된다.
예시)
interface명 객체명 = 매개변수 -> {실행할 내용};
이런 형식이다.
다만, 함수 내용이 한 줄이면 {} 생략가능하고, 매개변수도 하나 이면 () 생략 가능하다.