본문 바로가기

전체 글172

TemplateMethodTest package com.tjoeun.abstractClass; // 클래스를 선언할 때 final을 붙여서 선언하면 프로그램에서 상속을 할 수 없다. abstract class Car { // 필드를 선언할 때, final을 붙여서 선언하면 프로그램에서 값을 변경할 수 없다. => 상수 // 상수는 다른 필드와 구분하기 위해서 대문자로 만들어 사용한다. public static final String NAME = "홍길동"; // 메소드를 선언할 때 final를 붙여서 선언하면 프로그램에서 Override를 할 수 없다. final public void run() { } } class AICar extends Car { } public class TemplateMethodTest { public stati.. 2023. 12. 15.
AbstractClassTest package com.tjoeun.abstractClass; // 1개 이상의 추상 메소드를 포함한 클래스를 추상 클래스라 부르며, abstract 예약어를 사용해서 만든다. // 추상클래스는 불완전한 메소드를 포함하고 있기 때문에 불완전한 클래스이므로 new를 사용해서 // 객체를 만들어 사용할 수 없다. // 추상 클래스는 상속을 목적으로 만들어 사용하는 클래스이다. // 추상 클래스를 상속받은 자식 클래스는 추상 클래스로부터 상속받은 추상 메소드를 반드시 // Override 시켜서 사용해야 한다. => 다형성(Polymorphism) (하나의 메소드가 다양한 클래스에서 여러 용도로 사용된다.) 구현에 사용한다. // 자식 클래스에서 반드시 Override 시켜서 사용해야 하는 강제성을 프로그래머에.. 2023. 12. 15.
PolymorphismTest2 package com.tjoeun.abstractClass; import java.util.ArrayList; abstract class Animal { public abstract void move(); public void eating() { } } // Human 클래스는 Animal 클래스를 상속받아 만든다. class Human extends Animal { @Override public void move() { System.out.println("사람이 두 발로 걷습니다"); } public void readBook() { System.out.println("사람이 책을 읽습니다."); } } // Tiger 클래스는 Animal 클래스를 상속받아 만든다. class Tiger extends .. 2023. 12. 15.
PolymorphismTest package com.tjoeun.abstractClass; import java.util.Scanner; // 다형성(Polymorphism) 이란 같은 메소드가 서로 다른 클래스에서 다양하게 사용되는 것을 말한다. // 다형성 구현하기 위해서는 다형성을 구현할 메소드가 포함된 모든 클래스가 같은 부모 클래스 // 또는 인터페이스(상수 필드와 추상 메소드만 가질 수 있다.)를 가져야 하고 부모와 자식에 같은 이름의 메소드가 있어야 하며 // 자식 클래스에서 상속받은 추상 메소드를 무조건 Override 시켜서 사용해야 한다. // 부모 클래스 타입에 객체에 자식 클래스 타입의 객체를 대입(UpCasting)해서 다형성이 구현된 메소드를 실행한다. abstract class Shape { int x, y.. 2023. 12. 15.
UpDownCastingTest package com.tjoeun.abstractClass; class Base { // package 접근 권한은 접근 권한 지정자를 생략하면 package 권한으로 설정된다. (예전에 default 라고 불림) // package 접근 권한은 같은 package에서는 public 처럼 사용되고 다른 package에서는 // private 처럼 사용된다. String name; // 접근 권한을 생략했으므로 package 권한을 의미한다. void say() { System.out.println(name + "님 안녕하세요"); } } class Sub extends Base { int age; @Override void say() { System.out.println(name + "님은 " + age.. 2023. 12. 15.
CustomerTest package com.tjoeun.customer; public class CustomerTest { public static void main(String[] args) { // 일반 고객 객체 생성 Customer customerLee = new Customer(); System.out.println(customerLee); customerLee.setCustomerID(10010); customerLee.setCustomerName("이몽룡"); customerLee.setBonusPoint(1000); System.out.println(customerLee); System.out.println("회원 정보: " + customerLee.showCustomerInfo()); System.out.pr.. 2023. 12. 15.
VIPCustomer package com.tjoeun.customer; // 자식 클래스 // VIP 고객 정보를 기억하는 클래스 // 일반 고객이나 VIP 고객이나 기본적인 고객 정보는 동일하므로 Customer 클래스를 상속받는다. public class VIPCustomer extends Customer { // 일반 고객 정보에는 없고 VIP 고객 정보에만 있을 필드를 선언한다. // 1:1 상담원이 배정되고 제품을 구매할 때 가격의 10%를 할인해주고 보너스 포인트는 5%를 적립해준다. private int agentID; // 담당 1:1 상담원 ID private double salesRatio; // 추가 할인 비율 public VIPCustomer() { // 부모 클래스에서 private 권한으로 선언된 .. 2023. 12. 15.
Customer package com.tjoeun.customer; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.Objects; // 부모 클래스 // 일반 고객 정보를 기억하는 클래스 public class Customer { private int customerID; // 고객 ID private String customerName; // 고객 이름 private String customerGrade; // 고객 등급 private int bonusPoint; // 보너스 포인트 private double bonusRatio; // 보너스 포인트 적립 비율 public Customer() { // 신규 고객 카드 발급 .. 2023. 12. 15.
ClassIncludeTest package com.tjoeun.inheritance; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.Calendar; // 자바는 일반적으로 파일 1개에 1개의 클래스를 만들어 사용한다. // 필요에 따라 1개의 파일에서 여러개의 클래스를 만들어 사용할 수 있다. // 1개의 파일에 여러가지 클래스를 만들면 "*.java" 파일은 1개만 만들어지지만 // 컴파일된 "*.class" 파일은 각각 독립적으로 생성된다. // 현재 java 파일의 이름과 같은 이름의 클래스에만 public을 붙일 수 있다. // 기본 생성자가 실행되면 컴퓨터의 현재 날짜로 필드를 초기화하고 년, 월, 일을 넘겨받는 생성자가.. 2023. 12. 15.