1. 상속, 클래스 상속
자바에는 부모클래스와 자식클래스가 존재한다.
자식 클래스는 부모 클래스를 통해 그 부모의 멤버를 상속받아 쓸 수 있다.
예제를 보면서 클래스 상속을 사용해 보자.
package org.opentutorials.javatutorials.numberstring;
class Student{
int num1, num2;
public Student (int num1, int num2) {
this.num1=num1;
this.num2=num2;
}
public void Print() {
System.out.println("print1."+ num1 +", "+ num2);
}
}
class Student1 extends Student{
public Student1(int num1, int num2){
super(num1, num2);
}
public void Print1() {
System.out.println("print2."+ num1 +", "+ num2);
}
}
public class Number {
public static void main(String[] args) {
Student1 s=new Student1(17, 2);
s.Print();
s.Print1();
}
}
결과:
print1.17, 2
print2.17, 2
설명:
부모 클래스 Student가 형성되어 있고, 클래스 상속을 이용하여 자식 클래스 Student1을 만들어 보자 .
먼저 상속받고자 하는 자식 클래스명 옆에 extends 키워드를 붙이고, 상속할 부모 클래스명을 적는다.
(자바는 다중 상속을 허용하지 않으므로, extends 뒤에는 하나의 부모 클래스만 와야 한다).
EX) class (자식 클래스 이름) extends (부모 클래스 이름){ . . . }
이렇게 자식 클래스를 만들고 나면, 자식클래스는 부모클래스의 필드와 메소드를 상속받게 되어, 자식 클래스 안에서 직접 코드를 작성하지 않아도 부모 클래스의 기능을 물려받을 수 있게 된다. (main을 보면, 부모 클래스에 선언되어있는 메소드 s.Print()와 자식클래스에 선언되어 있는 s.Print1()가 바르게 실행된 것을 확인할 수 있다.)
참고
chanhuiseok.github.io/posts/java-1/
자바(JAVA) - 상속(Inheritance) (1) 클래스 상속, 부모 생성자의 호출
상속이란?
chanhuiseok.github.io
2. 부모 생성자
자바에서는 자식객체를 생성하기 위해선 먼저 부모객체가 생성되어 있어야 한다. 위의 예제에서 자식 클래스 Student1을 보면, super 키워드는 부모 클래스를 의미한다. 여기에 ()붙이면 부모 클래스의 생성자를 의미하게 된다. 이렇게 하면 부모 클래스의 기본 생성자가 없어져도 오류가 발생하지 않는다.
위의 예제에서도, super을 사용해 부모 객체를 먼저 만들었다.
참고:
opentutorials.org/course/1223/6126
상속과 생성자 - 생활코딩
편리함을 위해서 어떠한 기능을 수용하면 그 기능이 기존의 체계와 관계하면서 다양한 문제를 발생시킨다. 그 문제를 한마디로 줄여서 말하면 복잡도의 증가라고 할 수 있다. 이번 시간에는 생
opentutorials.org
3. 다형성
다형성: 같은 자료형에 여러 가지 객체를 대입하여 다양한 결과를 얻어내는 성질
(쉽게 말해, 키보드의 키를 통해서 비유를 들어보겠다. 키보드의 키를 사용하는 방법은 '누른다'이다. 하지만 똑같은 동작 방법의 키라고 하더라도 ESC는 취소를 ENTER는 실행의 목적을 가지고 있다. 다형성이란 동일한 조작방법으로 동작시키지만 동작방법은 다른 것을 의미한다.) -생활코딩-
아래 예제를 통해 다형성을 알아보자!
package org.opentutorials.javatutorials.numberstring;
class Student{
public void A(int num) {
System.out.println("숫자 "+ num);
}
public void A (String s) {
System.out.println("문자열 " + s);
}
}
public class Number {
public static void main(String[] args) {
Student s=new Student();
s.A(100);
s.A("string");
}
}
결과:
숫자 100
문자열 string
Student 클래스를 보면, 이름이 A인 메소드가 2개가 있다. 같은 이름이라도, 받는 변수가 int이냐, string이냐에 따라 각각의 메소드를 실행시킨다. 이렇게 같은 이름인 A를 공유하고 있어도 서로 다른 동작을 수행한다.
**오버로딩: 이름은 같지만 시그니처는 다른 메소드를 중복으로 선언 할 수 있는 방법을 메소드 오버로딩(overloading)이라고 한다.
오버로딩에 관련된 다형성 이외에도, 클래스와 관련된 다형성이 존재한다.
package org.opentutorials.javatutorials.numberstring;
class A{
public void a() {
System.out.println("부모-a");
}
}
class B extends A{
public void a() {
System.out.println("자식-a");
}
}
public class Number {
public static void main(String[] args) {
A mee = new B();
mee.a();
}
}
결과:
자식-a
부모클래스인 A와 자식 클래스인 B를 생성하였다. 그리고 클래스 B의 데이터 타입을 클래스 A로해서 인스턴스화 하고, 클래스 B의 메소드 a를 실행하면 클래스 A에서 정의된 메소드가 아니라 클래스 B에서 정의된 메소드가 실행 되었다. 클래스 A의 메소드 x를 클래스 B에서 오버라이딩하고 있다. 이렇게 상속과 오버라이딩을 이용해 다형성을 확인할 수 있다.
**오버라이딩: 하위 클래스에서 상의 클래스와 동일한 메소드를 정의하면 부모 클래스로부터 물려 받은 기본 동작 방법을 변경하는 효과를 갖게 되는 것
참고:opentutorials.org/course/1223/6127
다형성 - 생활코딩
이번 시간에는 다형성(Polymorphism)이라는 주제에 대해서 알아보자. 다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다. 키보드의 키를 통해서 비유
opentutorials.org
4. 추상 클래스
추상클래스란? 쉽게 말해 실체 클래스(실체가 드러나는 클래스)의 공통적인 부분을 추출해 어느정도 규격을 잡아놓은 클래스. (구체적인 클래스가 아니고, 클래스의 내용이 추상적인 레벨이긴 때문에 추상 클래스는 객체를 생성할 수 없음)
--> 이런 추상 클래스를 부모로 둔 실체 클래스를 만들어 사용한다.
추상 클래스는 클래스 앞에 abstract 를 붙이면 된다. (클래스 외에도, 메소드에 abstract를 붙일 수도 있다. )
추상 클래스 사용 이유:
1. 공통된 필드와 메서드를 통일할 목적
2. 실체클래스 구현시, 시간절약
3. 규격에 맞는 실체클래스 구현
실제로 추상 클래스를 이용해 보자!
package org.opentutorials.javatutorials.numberstring;
abstract class house{
String address;
public abstract void area();//구체적인 구현부는 없이!
//본체가 있는 메소드는 abstact 키워드를 가질 수 없음)
public void wel() {
System.out.println("Welcome");
}
//추상 클래스 내에는 추상 메소드가 아닌 메소드가 존재할 수 있다.
}
class A extends house{
public A() {
this.address="대한민국";
}
public void area() {
System.out.println("주소: 경기도");
}
}
public class Number {
public static void main(String[] args) {
A myhouse = new A();
myhouse.area();
myhouse.wel();
}
}
결과:
주소: 경기도
Welcome
추상 클래스인 house를 만들어서 주소 변수 address, 지역을 표시할 추상 메소드 area, 환영문구 메소드 wel을 만들었다. 그다음 실체 클래스 A를 만들어 address는 대한민국으로 만들고 추상메소드 area를 구체화 하였다. 실행 결과에서 area 메소드가 정상적으로 구체화된 후 작동되고, 추상 클래스 안에서 만들어진 wel메소드도 잘 작동하는 것을 볼 수 있다.
참고:
[JAVA] 자바 추상클래스란?
[JAVA] 자바 추상클래스란? 추상클래스 이 글 하나로 박살내자. 추상클래스의 문법적인 특징이나, 객체생성이 되고 안되고 이런 특징들이 중요한게 아닙니다. 도대체 추상클래스가 무엇이고 왜
limkydev.tistory.com
'자바 공부' 카테고리의 다른 글
인터페이스(역할, 사용, 상속) (0) | 2021.02.25 |
---|---|
문제풀이-2 (0) | 2021.02.16 |
this와 접근 제어자 (1) | 2021.01.31 |
객체지향이란? / 클래스선언, 클래스 구성, 변수, 메소드 등 (2) | 2021.01.25 |
참조타입/배열(2차원배열, 다차원 배열, 가변배열) (2) | 2021.01.16 |