10일은 발표날;;
<캡슐화> : 객체의 외부인 메인에서 너무 쉽게 접근이 가능하기 때문에 캡슐화가 필요함
즉,외부에서 내부를 건드리지 못하게 하는 것
private : 하이딩 /나만 쓸 수 있음/ 메인에서는 쓸 수 없음
class Student {
private String name; // 접근자, 접근제한자
private int score;
Student(String name,int score) {
this.name=name;
this.score=score;
}
// 캡슐화된 멤버변수의 값을 가져오고싶을때 == getter
public String getName() { // getXxx()
return this.name;
}
public int getScore() {
return this.score;
}
// 캡슐화된 멤버변수에게 새로운 값을 부여하고싶을때 == setter
public void setName(String name) {
this.name=name;
}
public void setScore(int score) {
this.score=score;
}
}
public class Test01 {
public static void main(String[] args) {
Student s1=new Student("티모",50);
Student s2=new Student("모르가나",80);
//System.out.println(s2.score);
System.out.println(s2.getScore());
//s1.score=81;
s1.setScore(81);
}
}
참고 ) 소스에 겟터/셋터 있음
생성자함수랑 비슷한 형태
getter : 파라미터 갖고 올 떄
setter : 내 값을 셋팅할 때 (고정)
<상속> : 자바는 다중상속이 되지 않는다(부모는 하나)
상속을 잘 쓰면 확장 개발에 용이하다
class Animal { // 상위 클래스, 부모 클래스
private String name; /// protected
private String type;
void hello() {
System.out.println("멍멍!");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
class Dog extends Animal { // 하위 클래스, 자식 클래스, 파생 클래스
void play() {
System.out.println("scroll");
}
}
class Cat extends Animal {
void sleep() {
System.out.println("zzz.......");
}
}
public class Test03 {
public static void main(String[] args) {
Dog dog=new Dog();
}
}
참고) protectecd
- 내 자식까지는 쓸수 있게 해줌
-실무에서는 잘 쓰지 않음
-가리려면 확실히 가리고 오픈할 거면 오픈해라(private/public)
★중요
//부모클래스에서 에러가 생기면 자식클래스에도 문제가 생긴다
기본생성자가 에러의 원인
"자식클래스의 생성자"는 "무조건" 가장 먼저 "부모의 기본생성자"를 호출함!!!!
-자기자신 객체 this
- 부모는 super
- 부모의 기본생성자 super();
=>부모클래스에게 기본 생성자가 없다면 자식클래스에서는 에러가 발생한다.
해결방안 두가지
1) 부모클래스에게 기본 생성자를 선언. - (원칙 : 상부에 보고)
★2) 자식클래스의 생성자가 부모클래스가 가지고 있는 다른 생성자를 호출 - 더 좋은 해결책
생성자 이슈가 상속에서 가장 중요한 이슈다!!!★★★
▶오버로딩-함수명 중복정의 허용. 메서드시그니쳐가 달라서 가능
▶ 오버라이딩- 메서드 시그니쳐가 똑같은데 기능
부모클래스가 가진 메서드를 자식클래스의 특성에 맞게 재정의
//메서드 재정의 : 상속관계에서만 발생, 메서드 시그니쳐가 동일함.
@Override //anotation(어노테이션)
가독성을 높여준다-아!상속관계구나
컴퓨터입장에서는 호출을 빠르게 해줄 수 있다.
class Shape {
String name;
double area;
Shape(String name){
this.name=name;
this.area=0.0;
}
void draw() {
System.out.println("모양대로 그림 그리기");
}
}
class Rect extends Shape {
int x;
int y;
Rect(int x){
this(x,x);
}
Rect(int x,int y){
super("사각형");
this.x=x;
this.y=y;
this.area=this.x*this.y;
}
@Override
void draw() {
System.out.println("사각형 그림 그리기");
}
}
class Circle extends Shape {
int radius;
static final double PI=3.14;
Circle(int radius){
super("원");
this.radius=radius;
this.area=this.radius*this.radius*Circle.PI;
}
@Override
void draw() {
System.out.println("원 그림 그리기");
}
}
@ 오버라이딩
<Object> : 자바의 최상위 클래스
자바에서 선언 및 생성하는 모든 클래스는 Object를 상속받음
예) .equals() , .toString()
System.out.println(s);
System.out.println(s.toString());
=>둘은 같은 값을 지닌다
s는 toString을 자동호출하고 있었다.
toString 은 Object 자바에서 제공함
generate toString을 더 많이 쓴다.
super toString은 커스터마이징 할 경우 아니면 잘 쓰지 않는다.
★중요★ : 순서유의
1.멤버변수생성자
2. 메서드
3. getter/setter
4. toString
'JAVA > 강의' 카테고리의 다른 글
| JAVA 8일차 강의 - 클래스 (0) | 2025.02.17 |
|---|---|
| JAVA 14일차 강의 -OOP 2부 : 예외처리와 컬렉션 프레임워크 (0) | 2025.02.01 |
| JAVA 강의 6일차 - 복습과 PK (1) | 2025.01.30 |
| JAVA 강의 4일차- 배열과 NEW 그리고 정렬 (0) | 2025.01.30 |
| JAVA 강의 3일차 - 반복문 (1) | 2025.01.30 |