구현 방식
상속 및 구현
목적
사용 제한
유연성
Member obj1 = new Member("Black");
Member obj2 = new Member("Black");
Member obj3 = new Member("White");
System.out.println(obj1.equals(obj2)); // true가 출력
System.out.println(obj1.equals(obj3)); // false가 출력
public class Java_01 {
public static void main(String[] args) {
Member obj1 = new Member("Black");
Member obj2 = new Member("Black");
Member obj3 = new Member("White");
System.out.println(obj1.equals(obj2)); // true가 출력
System.out.println(obj1.equals(obj3)); // false가 출력
Rectangle rec = new Rectangle();
Rectangle rec2 = new Rectangle();
boolean b = rec.equals(rec2);
System.out.println(b); // true가 출력
class Member extends Object{
private String color;
}
}
public Member(String color) {
this.color = color;
}
@Override
public boolean equals(Object obj) {
Member member = (Member) obj; // 자식 = 부모 되는 케이스트 자식 = (자식)부모 시켜서 부모에 있는 주소에 자식이 미리 메모리에 올라가 있어야함
if (color.equals(member.color))
return true;
return false;
}
}
}
Circle circle = new Circle(10);
System.out.println(circle); //원의 넓이는 314.1592 이고 반지름은 10 인원
class Circle5{
private double radius;
public Circle5(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
public double getArea() {
return radius*radius*Math.PI;
}
@Override
public String toString() {
return "원의 넓이는 " +getArea()+" 이고 반지름은 "+getRadius() +"인 원";
}
}
public class Java_01 {
public static void main(String[] args) {
Circle5 circle = new Circle5(10);
System.out.println(circle);
}
}
abstract class Calc{
protected int a;
protected int b;
void setValue(int a, int b) {this.a = a; this.b = b;}
abstract int calculate();
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("두 정수와 연산자를 입력하시오>> ");
int a = sc.nextInt();
int b = sc.nextInt();
char c = sc.next().charAt(0);
if(c == '+'){
Add add = new Add();
add.setValue(a, b);
System.out.println(add.calculate());
}
else if(c == '-'){
Sub sub = new Sub();
sub.setValue(a, b);
System.out.println(sub.calculate());
}
else if(c == '*'){
Mul mul = new Mul();
mul.setValue(a, b);
System.out.println(mul.calculate());
}
else if(c == '/'){
Div div = new Div();
div.setValue(a, b);
System.out.println(div.calculate());
}
}
// calculate
abstract class Calc {
protected int a;
protected int b;
void setValue(int a, int b) {
this.a = a;
this.b = b;
}
abstract int calculate();
}
class Add extends Calc{
@Override
int calculate() {
return super.a + super.b;
}
}
class Sub extends Calc{
@Override
int calculate() {
return super.a - super.b;
}
}
class Mul extends Calc{
@Override
int calculate() {
return super.a * super.b;
}
}
class Div extends Calc{
// 애너테이션은 기본적으로 일정한기능을 가진 함수
@Override // 부모에 해당함수 잇어야 한다.
int calculate() {
if(super.b == 0) {
return 0;
}
return super.a / super.b;
}
}
해당 메서드가 상위 클래스나 인터페이스에서 상속받은 메서드를 재정의(Override)한 것임을 표시하는 데 사용된다.
메서드 위에 붙여주면 컴파일러가 해당 메서드가 실제로 상위 클래스나 인터페이스의 메서드를 오버라이딩하고 있는지 확인하고, 오버라이딩 규칙에 맞게 구현되었는지 검사 -> 오버라이딩이 제대로 되지 않은 경우 컴파일 오류가 발생
Person kim = new Person("홍길동",35);
Person park = new Person(new String("홍길동"),35);
Person heo = new Person("홍길동",34);
if(kim.equals(heo))
System.out.println("같은 사람입니다.");
else
System.out.println("다른 사람입니다.");
=========================
같은사람입니다.
Person kim = new Person("홍길동",35);
Person park = new Person("홍길동",35);
Person heo = new Person("홍길동",34);
if(kim.equals(park))
System.out.println("같은 사람입니다.");
else
System.out.println("다른 사람입니다.");
if(kim.equals(heo))
System.out.println("같은 사람입니다.");
else
System.out.println("다른 사람입니다.");
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person otherPerson = (Person) obj;
return name.equals(otherPerson.getName()) && age == otherPerson.getAge();
try 블록
catch 블록
finally 블록
try-catch-finally 구문은 예외를 처리하고, 자원을 정리하거나 반환하는 등의 작업을 수행하는 데 유용한다.