# 메소드 오버로딩
public class VolTest {
public static void main(String[] args) {
System.out.println("설계한 대로 실행체크(단위테스트)");
// 객체는 다르지만 공통적으로 사용하는 메소드는 같음(통일성 부여)
TV t = new TV();
Radio ra = new Radio();
t.turnOn();
ra.turnOn();
t.volumUp(80);
ra.volumUp(70);
// 비슷한 기능을 가진 메소드 작성 -> 메소드명을 통일(오버로딩)의 확장판(모든 클래스 단위로 설계)
}
}
/*
* 자식인터페이스 extends 부모인터페이스
* 자식클래스 extends 부모클래스
* 자식클래스 implements 부모인터페이스1, 부모인터페이스2, .... 다중상속
*/
public class TV implements AdvanceVolum {
private int VolLevel; // 볼륨의 크기
// 다형성 : 메소드명은 같지만 실제 내용은 다르다 -> 기능이 다 다르다
@Override
public void turnOn() {
// TODO Auto-generated method stub
System.out.println("TV 음악프로그램을 turnOn-----");
}
@Override
public void turnOff() {
// TODO Auto-generated method stub
System.out.println("TV 음악프로그램을 turnOff-----");
}
@Override
public void volumUp(int level) {
// TODO Auto-generated method stub
VolLevel += level;
System.out.println("TV 음악프로그램을 VolumUp을 " + level + "만큼 올림-----");
}
@Override
public void volumDown(int level) {
// TODO Auto-generated method stub
VolLevel -= level;
if (VolLevel < 0 ) {
VolLevel = 0;
}
System.out.println("TV 음악프로그램을 VolumDown을 " + level + "만큼 내림-----");
}
// TV에만 있는 다른기능은 각자 개발자에게 맡김
}
// 자식 인터페이스명 extends 부모인터페이스명
public interface AdvanceVolum extends Volum {
/*-
* 부모로부터 물려받은 추상메소드를 이미 가진 상태
* public void volumUp(int level);
* public void volumDown(int level);
*/
public void turnOn(); // 프로그램 전원 ON
public void turnOff(); // 프로그램 전원 OFF
}
/*
* interface : +전체 프로그램에 사용되는 모든 공통적인 기능(업무분석)을 가지고
* 추상메소드를 선언
* 누구나 접근이 가능하도록 public interface로 작성
*/
public interface Volum {
// 1. 볼륨을 올리기 -> 수정 -> 매개변수O 반환값X
public void volumUp(int level);
// 2. 볼륨을 내리기 -> 수정 -> 매개변수O 반환값X
public void volumDown(int level);
// 3, 4 turnOn turnOff
}
/*
* 자식인터페이스 extends 부모인터페이스
* 자식클래스 extends 부모클래스
* 자식클래스 implements 부모인터페이스1, 부모인터페이스2, .... 다중상속
*/
public class Radio implements AdvanceVolum {
private int VolLevel; // 볼륨의 크기
// 다형성 : 메소드명은 같지만 실제 내용은 다르다 -> 기능이 다 다르다
@Override
public void turnOn() {
// TODO Auto-generated method stub
System.out.println("Radio 음악프로그램을 turnOn-----");
}
@Override
public void turnOff() {
// TODO Auto-generated method stub
System.out.println("Radio 음악프로그램을 turnOff-----");
}
@Override
public void volumUp(int level) {
// TODO Auto-generated method stub
VolLevel += level;
System.out.println("Radio 음악프로그램을 VolumUp을 " + level + "만큼 올림-----");
}
@Override
public void volumDown(int level) {
// TODO Auto-generated method stub
VolLevel -= level;
if (VolLevel < 0 ) {
VolLevel = 0;
}
System.out.println("Radio 음악프로그램을 VolumDown을 " + level + "만큼 내림-----");
}
// Radio 에만 있는 다른기능은 각자 개발자에게 맡김
}
# 인터페이스 상속관계
// 자식클래스명 extends 추상클래스 implements 인터페이스명.....
public class ShapeTest extends Shape implements Drawable {
// public double res = 0.0;
// print Area();
@Override
public void draw() {
System.out.println("원을 그려서 원의 면적 구하기");
}
@Override
public double area(int r) {
// java.lang.Math.PI(정적상수)
return (r * r * Math.PI);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("원의 반지름을 입력하세요.");
int r = sc.nextInt();
ShapeTest st = new ShapeTest();
st.res = st.area(r);
st.printArea(); // 저장된 면적을 출력
sc.close();
}
}
// 원의 면적을 구해서 출력시켜주는 역활(추상클래스) 설계 + 메소드 제공
public abstract class Shape {
// 직사각형, 원(소수점), 삼각형
public double res = 0.0; // 모든 도형에서 공통으로 사용할 변수(면적)
// 원
public abstract double area(int r); // 추상메소드(원의 반지름)
//직사각형
// public abstract int area(int x, int y);
// 공통의 기능을 일반메소드로 만들면 상속 받아서 바로 사용할수 있음
public void printArea() {
System.out.println("도형의 총 넓이 : " + res);
}
}
// 도형을 그린다.(원, 삼각형, 직사각형의 면적을 구한다)
public interface Drawable {
public void draw(); // v(Circle, Rectangle, ...)
// public double area(int r); // 원의 면적
}
# final
class Parent {
// 1. final + 멤버변수 or 지역변수 -> 상수화(변수의값 고정)(대문자로 사용)
final int COUNT = 1; // 멤버변수 옆에 final을 붙이면 그 변수 값은 절대 변경 못함
// 관례로 final이 붙은 변수명은 대문자로 적음
// 2. final + 메소드명 : 상속은 허용해주는데 오버라이딩 금지X
// 메소드의 성격과 전혀 다른 내용으로 변경하면 안되는 경우
public final void sum(int a, int b) {
System.out.println("sum : " + (a + b));
}
// 3. final class명 : 상속금지 -> 내용을 변경하면 안되는 class에 부여(ex 시스템)
// final class Parent {} -> public class FinalTest extends Parent (상속 불가능X)
}
public class FinalTest extends Parent {
/*
final 을 붙임으로써 오버라딩이 금지됨
public void sum(int a, int b) {
System.out.println("데이터 연습중");
}
*/
// count = 1
public static void main(String[] args) {
Parent p = new Parent();
FinalTest ft = new FinalTest();
// p.count = 2;
System.out.println("p.COUNT : " + p.COUNT);
ft.sum(10, 10);
}
}
# static method (정적메소드)
/*-
* static(정적의)
* 1. 정적멤버변수
*
* 멤버변수(인스턴스변수) : 클래스 내부에서 선언된 변수 -> 공유가 안됨X(독립적 저장)
* 정적멤버변수(클래스변수) : 모든 객체가 공유할 수 있도록 만들어진 변수
* 형식) : 클래스명.정적멤버변수명 or 객체명.정적멤버변수명
*
* 2. 정적메소드
* 3. 초기화 블럭(static {범위})
*/
class Car {
String color; // c1.color("Red")
String model;
String owner; // 주문자
// 차의 종류와 상관없이 차의 생산량의 합을 계산
static int serialNumber; // static을 붙이면 공유가 됨(공유값)(ex. 단체가 사용할 프린터 1대)
public Car(String color, String model, String owner) {
super(); // class Car extends Object 때문에 super가 생성됨
this.color = color;
this.model = model;
this.owner = owner;
serialNumber++; // 공통적으로 모든 객체가 불러다 사용하고 싶을때(공유하고 싶을때)
}
public static int getNumber() {
return serialNumber; // 정적메소드 내부에서는 멤버변수 사용이 안됨X
// this를 정적메소드 내부에서 사용할 수 없기 때문에 멤버변수 사용이 안됨X
/*-
* public static String getNumber() {
* return color; // 사용이 안되는 이유는 color 앞에 this가 생략되어있는 상태(this때문에)때문
* // static 붙은 변수만 사용 가능
* }
*
*/
}
// main() 보다 먼저 실행시킬 구분이 필요하다면 static 영역설정
// 환경설정 -> DB연동
static { // 초기화 블럭
System.out.println("제일먼저 main() 보다 실행할 구문이 필요할때");
System.out.println("DB접속을 먼저 가능하도록 설정하고 싶을때");
System.out.println("1. static 정적변수 -> 2. main() 호출");
System.out.println("3. 정적메소드 -> 4. 클래스 -> 순으로 메모리에 로딩");
}
}
public class CarFactory {
public static void main(String[] args) {
Car c1 = new Car("Red", "SM5", "홍길동");
Car c2 = new Car("Blue", "SONATA", "임꺽정");
Car c3 = new Car("Pink", "morning", "홍길동2");
System.out.println("차 생산량(객체명.정적변수) : " + Car.serialNumber);
System.out.println("차 생산량(객체명.정적변수) : " + c2.serialNumber);
System.out.println("차 생산량(객체명.정적변수) : " + Car.getNumber());
System.out.println("차 생산량(객체명.정적변수) : " + c1.getNumber());
}
}
'국비학원 > 공부' 카테고리의 다른 글
22일차 java(10) (0) | 2023.07.03 |
---|---|
21일차 java(9) (0) | 2023.07.03 |
19일차 java(7) (0) | 2023.07.02 |
18일차 java(6) (0) | 2023.05.16 |
17일차 java(5) (1) | 2023.05.15 |