기본 클래스 구조에서 부모클래스의 속성, 메소드를 자식클래스에서 이어받아 사용할수 있는 기능을 상속 이라고합니다.
기본적으로 객체지향 프로그래밍에선 상속 기능을 제공합니다.
상속의 사용방법은 다음과 같습니다.
public class Parent{
...
}
public class Child extends Parent{
...
}
상속을 받는 자식클래스에 extends 키워드를 사용하면 됩니다.
아래는 상속의 사용 예입니다.
public class Parent{
private String name;
private int number;
protected void Init(String name,int number){
this.name = name;
this.number = number;
}
protected String GetName(){
return this.name;
}
protected int GetNumber(){
return this.number;
}
}
public class Child extends Parent{
public Child(String name, int number){
this.name = name;
this.number = number;
}
}
this는 본인객체, 클래스를 뜻합니다.
예를 들어.
public class MyClass{
private int num = 10;
public void Print(){
System.out.println("MyClass ==> " + this.num);
}
}
public class YourClass{
private int num = 30;
public void Print(){
System.out.println("Your Class ==> " + this.num);
}
}
public class Main{
private int num= 20;
public void Print(){
System.out.println("Main Class ==> " + this.num);
}
public static void main(String[] args){
MyClass myclass = new MyClass();
myclass.Print();
YourClass myclass = new YourClass();
myclass.Print();
this.Print();
}
}
3개의 각각 같은 이름의 num이라는 변수를 가지고 있습니다.
하지만 3클래스 내부에 있는 값은 완전 다른 값입니다.
그리고 각각 Print를 부를때 본인 this로 속성값에 접근합니다.
본인클래스 말고는 접근할수 없습니다.
this키워드는 본인 객체의 속성값을 접근할때 사용합니다. (생략이 가능) 하지만 구분을 위해 this를 사용하는것이 좋습니다.
Super 키워드는 상속을 받은 자식클래스에서 부모 클래스를 부를때 사용합니다.
this키워드는 자기자신을 가리키는것이였다면, super 키워드는 부모 클래스를 부르는것과 동일합니다.
아래의 예를 보시면 쉽게 이해할수 있습니다.
public class Parent{
int num;
public Parent(int a){
this.num;
}
public void Print(){
System.out.println("부모 클래스에서 called");
}
}
public class Child extends Parent{
int num;
public Parent(int a){
this.num;
}
public void Print(){
System.out.println("자식 클래스에서 called");
}
public void SuperCall(){
super.Print();
}
}
public class Main(){
public static void Main(String[] args){
Parent p = new Parent(10);
p.Print();
Child c = new Child(30);
c.SuperCall();
c.Print();
}
}
선형 데이터 구조는 직선으로 연결된 자료구조를 뜻합니다.
1. 배열
배열은 선형자료구조중에서 속도가 빠르고 직접 접근하는 (랜덤액세스) 방식을 사용 하는 자료구조입니다.
타입[] 배열변수명;
타입[] 배열변수명 = new 타입[배열갯수]
타입[] 배열변수명 = new 타입[배열갯수]
아래는 사용의 예입니다.
public class Main{
private String[] nameString;
private float[] floattingArray = new float[10];
public static void main(String[] args){
nameString = new String[20];
int[] node = new int[10];
for(int i = 0; i< nameString.Length){
nameString[i] = i.ToString();
}
node[0] = 10;
node[2] = 2;
}
}
2. ArrayList
리스트역시 선형 자료구조이며. 리스트로 연결된 노드를 순회하며 탐색하는 구조 입니다.
리스트는 초기사이즈를 정하지않고, 추가하고 지울때 마다 자동으로 늘어나고 줄어들으는 구조입니다. 자동으로 되는만큼 속도가 배열에비해 많이 느립니다.
// ArrayList 를 사용하기 위해선 ArrayList 패키지를 추가해줘야합니다.ㅁ
import java.util.ArrayList;
public class Main{
private ArrayList<Integer> defList;
public static void main(String[] args){
defList = new ArrayList<Integer>();
defList.Add(10);
defList.Add(20);
for(int i = 0; i< DefList.size(); i++){
System.out.println("List [ "+i + "]" + = defList[i]);
}
// 값자체를 삭제하는 방법
defList.delete(10);
}
}
List Method | 설명 |
.Add(값) | 값을 리스트에 추가한다. |
.delete(값) | 값을 리스트에서 제거한다. |
.sort() | 리스트를 오름차순으로 정렬한다. |
.get(int index) | 해당 인덱스에 속하는 값을 출력한다. |
.set(int index, E Element) | 인덱스의 값을 E원소값으로 변경한다. |
.clear() | 리스트를 지운다. |
리스트의 값탐색은 배열과 동일하게 사용하면 된다,
1아래 조건에 맞도록 설계하세요.
0. 동물 클래스를 만든다. (Animal)
1. 동물을 상속받아 강아지 클래스, 새 클래스를 만든다.
2. 강아지와 새는 날개의 유무로만 구분한다.
3. 사용자로부터 입력을 받아 리트리버 , 독수리 객체를 만든다.
4. 동물클래스는 다리 갯수를 속성으로 가지고 있다.
5. 울음소리는 메소드 (함수이다)
6. 리트리버, 독수리 객체의 울음소리 메소드를 부르면 울음소리가 출력되어야한다.
2. 학생부 클래스를 만드세요
사용자로부터 학생의 이름, 나이 ,학과 정보를 받아 학생부 클래스를 만드세요.
학생의 최대 인원은 10명으로 제한 합니다.
10명이 넘으면 입력을 받을수 없습니다.
프로그램을 실행하면 (종료를 하기전까지 )다음과 같이 실행되야합니다.
1. 학생 추가
2. 학생 제거
3. 학생 수정
4. 학생부 출력
9. 프로그램 종료
1. 학생 추가는 이름, 나이 , 학과 정보만 입력받습니다. (이름, 학과는 문자열 입니다.) 나이는 정수값
2. 학생제거는 인덱스값으로 제거합니다.
3. 학생 수정 메뉴를 입력하면 입력한 데이터로 덮어쓰기 되면 된다.
4. 학생부 출력은 현재 존재하는 학생만 출력하세요.
9. 프로그램을 종료 합니다.
Java Study 혼자 해보기 문제 (0) | 2021.11.07 |
---|---|
Java Study - Generic & Exception (0) | 2021.11.01 |
Java Interface / 추상클래스 - Class 5 (0) | 2021.10.19 |
Java I/O , class -3 (0) | 2021.09.26 |
Java Variable, Loop, Flow Control -2 (0) | 2021.08.29 |
Java 개발환경 설정-1 (0) | 2021.08.29 |