Wed/Jan/8 [Java] day7. 상속, static
Wed/Jan/8
[Java]
day7. 상속, static
상속 extends
[Java]
day7. 상속, static
상속 extends
- super class; parent class
- child class ; 파생 class
상속 방법
- extends keyword 이용해 상속받을 부모 class 지정
상속 특징
- parent class가 가진 모든 것을 child class가 이어받음
- 코딩양을 줄일 수 있음
- 단! private 붙은 것 제외
- 한번에 하나만 상속 가능
- 두개 이상 상속 불가
- ex) public class A {} ; public class B {}; 있을 때
- public class C extends A {} // 가능
- public class C extends A, B {} // 불가능
- 상속의 재상속 가능
- ex) public class D extends A {};
- public class E extends D {}; // 가능
- 다형성과 interface
variables and methods
- public : 다른 class, package에서 사용가능
- private : 해당 class 안에서만 사용
- 없는 경우 : 해당 package안에서 사용가능
1
2
3
4
5
6
7
8
9
10
|
// MainClass에서 다른 class 객체 형성
ParentClass pc = new ParentClass();
// parentClass variables, method 사용가능, public variables 사용가능, private variables 제외
ChildClass cc = new ChildClass();
// parentClass variables, method 사용가능, public variables 사용가능, private variables 제외
OtherClass oc = new OtherClass(); // 다른 package에 있는 class
// parentClass method, public variables 사용가능, 일반 variables는 같은 package 안에서만 사용 가능
| cs |
상속의 접근제한자
: 외부로부터 클래스 자신을 보호하기 위해 접근을 제한하는 것
★ 접근제한자 종류 ★ (반드시 알아둘 것)
- public : 어디서나 모두 허용
- protected : 상속되는 자식class까지만 허용, package 달라도 상속되면 허용
- default : 동일 package 내에서만 허용
- private : 해당 class 내에서만 허용
접근제한자 사용
declare to classes, methods, operators, variables
단, class 선언시 private은 사용불가!
* Java Web에서 상속은 필수 개념! (시작부터 상속 관련 내용 등장)
1
2
|
super(); // 가장 먼저 해야 할 것! class 맨 첫줄에 써야함, call ParentClass operator method
super(250); // parentClass operator 가 값을 받을 수 있는 경우
| cs |
< method declaration >
Overloading
- 동일한 method 이름 이용해, 다양한 data 처리할 경우
- 조건 : 매개변수의 갯수가 다르거나, 동일 갯수일 경우 data type 달라야
1
2
3
4
5
6
7
8
9
10
11
|
public void test() { //가능
}
public void test(int a) { //가능
}
public void test(String a) { //가능
}
public void test(int a, int b) { //가능
}
public void test(int n) { // 불가능
}
| cs |
Override
- 부모로부터 "상속받은" method, 자식 class에서 수정 가능
- childClass는 parentClass method의 {}내부만 수정가능
- method 선언부를 수정하면, child class가 선언한 method로 변경
1
2
3
4
|
public void parentMethod(){
int s = 100;
System.out.println("inside of OtherClass parentMethod" + 100);
}
| cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
// superclass A의 method 내부 변경
public class B extends A{
public B() {}
public void test(){
int a = 10+30+50;
System.out.println(a);
}
}
// superclass A의 method 선언부 변경 (return type )
// 이러면 C class 선언 method가 됨
public class C extends A{
public C(){}
public int test(){
return 100;
}
}
// superclass A의 method 선언부 변경 (parameter 추가)
// 이러면 D class 선언 method가 됨
public class D extends A{
public D(){}
public void test (ind n){
System.out.printnln(n)
}
}
| cs |
상속의 활용
- 프랜차이즈 상품별 매출 변수 : 전체 동일한 품목 - 상속, 지점별 별도로 판매하는 품목 - 별도 생성
Class 종류 (다시 정리)
- Main Class
- public static void main (String[] args){} 포함
- mian() method : 프로젝트의 주 thread로 사용됨, process 개념
- 일반 Class
- public static void main (String[] args){} 포함하지 않는 class,
- 생성자는 필요함
- 파생 class
- super class에 의해 선언된 class
- parent class 상송받는 child class
- 추상 class
- abstract keyword 이용해 선언
- public abstract class Test {}
- interface class
- interface keyword 이용해 선언
- public interface Test {}
* 추상, interface는 Java Web Spring에서 많이 쓰임,
* Class를 여러개 만들때, 항상 짧은 거부터 만들어야, 긴거부터 하면 짧은거 못만듦
ex) com.kkk.phone >> com.kkk.phone.machine
Getter method
보안 필요한 private 변수들을 다시 꺼내와야 하는 경우
> public method 생성해서 return
1
2
3
4
5
|
private String phoneNumber = "";
public String getPhoneNumber() { // Getter method
return this.phoneNumber;
}
| cs |
1
2
3
4
5
6
7
8
9
|
// getter method
public String getName() {
return name;
}
// setter method
public void setName(String name) {
this.name = name;
}
| cs |
eclipse로 편하게 만들자
* 주민번호 - private 변수선언, getter/setter 모두 안만듦
* 사원번호 - private 변수선언, getter 는 만들고 setter는 안만듦
< static >
static이 붙은 method, variables는 static 붙지 않은 곳에서 선언한 method, variable 호출 불가
> 저장되는 위치가 다르다!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
int a = 10;
static int b = 100;
public static void main(String[] args) {
System.out.println(a); // error
test(); // error
System.out.println(b);
testb();
}
public void test() {
System.out.println(a);
}
public static void testb() {
System.out.println(b);
}
| cs |
> 메모리의 영역
- class 저장되는 memory, static method/variables도 저장
- object 저장되는 memory, 일반적인 method/variables
- 두 memory간 상호 호출 불가능, 아예 구분되어 있음
static에서 변수선언하게 되면,
- className.varName 이런식으로 바로 호출해서 대입 가능함
- (아주 유용하든지, 독이 되든지)
- 1234public class DataClass{public static int a = 10;}DataClass.a = 1000;
cs
- 각 object 가 공유할 값으로 사용
- 모든 object에 동일한 값 적용하는 경우, 한 class에서 임의로 정하면 다른 class에서도 모두 바뀜
- 모든 상품에 동일한 할인률 적용
- Math.PI, Math.random, Math.round, Math.floor,...
- Math Class 안에 static double 로 정의
- Math Class 안의 수학 관련 variables, methods, 상수 대부분 static으로 정의
- 1234567891011public class A {public static int n1 = 0;public int n2 = 5;}// 다른 class에서 A type 변수 선언할 때, n1의 값도 함께 선언됨A a1 = new A();a1.n2 = 15; // 가능// n1의 경우, a1 선언 하지 않고서 바로 선언 가능A.n1 = 1000; // 가능
cs
1
2
3
4
5
6
7
8
|
public class DataClass {
static ArrayList<String> str = new ArrayList<String>();
public DataClass(){
str.add("abc"); ....}
System.out.println(DataClass.str.size()); // 0
DataClass dc = new DataClass();
System.out.println(DataClass.str.size()); // 개수 출력, 개체 형성해야
| cs |
1
2
3
4
5
|
// OperClass에서 static variable 선언
static double PI = 3.14195;
// MainClass에서 바로 호출
System.out.println(OperClass.PI); // 3.14195
| cs |
1
2
3
4
5
6
7
8
|
// OperClass에서 static method 선언
static void sum() {
System.out.println("합구하기");
}
// MainClass에서 바로 호출
OperClass.sum(); // 합구하기
| cs |
Math Class 의 methods
1
2
3
4
|
double pi = Math.PI; // Math.PI == 3.141592653589793
System.out.println(Math.floor(pi)); // 내림
System.out.println(Math.ceil(pi)); // ★올림★
System.out.println(Math.round(pi)); // 반올림
| cs |
Math.ceil(); // page 수 구하는 방법에 사용되므로 꼭 알아둘 것 ★
1
2
3
4
5
6
7
8
|
// 반올림 하고, 소수점 위치 바꾸기
double d=45.3566;
d=d*100;
System.out.println(d); // 4535.66
d=Math.round(d);
System.out.println(d); // 4536.0
d = d/100;
System.out.println(d); // 45.36
| cs |
1
2
3
4
5
|
Math.atan2(); // 회전각 구하기 할 때 아주 많이 쓰임
Math.max(a, b); // 큰 값
Math.min(a, b); // 작은 값
Math.sqrt(); // root
Math.pow(a, b); //
| cs |
<문제>
이마트 전체 매출 출력
<End>
댓글
댓글 쓰기