추상 클래스
abstract를 함수에 붙일때 클래스에도 같이 붙이면 에러가 안남
공통점
new 연산자로 인스턴스 생성 불가능.
프로토타입만 있는 메서드를 갖는다.
사용하기 위해서는 하위클래스에서 확장/구현 해야 한다.
차이점
사용하는 키워드가 다르다.
Abstract는 일반 메서드를 사용할 수 있지만,
Interface는 메서드 선언만 가능하다.
clone()
equals()
finalize()
getClass()
hashCode()
notify()
notifyAll()
toString()
wait()
wait(long)
wait(long, int)
- (11개중 equals, hashCode, toString만 알면 된다.)
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가 출력
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 Circle{
private double radius; //변수선언 > 게터세터 넣기
public Circle(double radius) {
this.radius=radius;
}
public double getRadius() {
return radius; //원의 넓이를 가져오는 함수
}
public void setRadius(double radius) { //외부값받아서 원의넓이를 변경하는 함수
this.radius = radius;
}
public double getArea() {
return radius*radius*Math.PI; //원의 넓이 곱하는 함수만듦
}
@Override
public String toString() {
return "원의 넓이는" + getArea()+"이고 반지름은"+radius+"인원";
}
}
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());
}
}
class Add extends Calc{
@Override
int calculate() {
return a + b;
}
}
class Sub extends Calc{
@Override
int calculate() {
return a - b;
}
}
class Mul extends Calc{
@Override
int calculate() {
return a * b;
}
}
class Div extends Calc{
@Override
int calculate() {
return a / b;
}
}
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("다른 사람입니다.");
=========================
같은사람입니다.
class Person1 {
private String name;
int age;
public Person1(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
Person1 person = (Person1) obj;
if ((this.name == (person.name)) && (this.age == person.age))
return true;
return false;
}
}
에러나서 프로그램이 동작하지 않는것을 방지하는 예외처리(에러처리)
예시
try {
int num = sc.nextInt();
System.out.println(num);
// System.out.println(3/0);
} catch (Exception e) {
System.out.println("캐치 안입니다");
}
finally {
System.out.println("파이널리입니다.");
}
System.out.println("프로그램 종료입니다.");
(못하는게 어딨어 하라면 공부해서 해야지)