티스토리 뷰

수업

package main;

public class Main {

	public static void main(String[] args) {
//		Account ac1 = new Account("개똥이", "100-08-233523", 1000);
//		ac1.deposit(2000);
//		System.out.println(ac1.balance);
//		ac1.withdraw(500);
//		System.out.println(ac1.balance);
	}

}

 

package main;

public class Account {
	String name;
	String num;
	int balance;
	
	int withdraw(int amount) {
		if(amount > balance) {
			System.out.println("돈 읍따 그지야");
			return 0;
		}else {
			balance -= amount;
			return amount;
		}
	}
	
	void deposit(int amount) {
		balance += amount;
	}


//	public Account(String name, String num, int balance) {
//		this.name = name;
//		this.num = num;
//		this.balance = balance;
//	}
	
}
package main;

public class CheckingCard extends Account {
	String cardNo;
	
	int pay(int amount) {
		if(balance < amount) {
			System.out.println("돈 없는 주제에 카드 결재하지 마라");
			return 0;
		}else {
			return withdraw(amount);
		}
	}
}

teacher

//필드에는 특성을

//void에는 움직임을

// 빨간줄 뜰때 일단 저장먼저

// 상속 클래스 만들 때는 모체보다 자식 클래스 먼저 만들고 거기서 해당하는 공통점을 모아서 모체 클래스 만들기

 

	public Mama(String string, String string2, String string3, String string4, int i) {
		// TODO Auto-generated constructor stub
	}

//상속관계에서 부모가 생성자를 가지면 자식클래스도 무조건 생성자를 가져야 한다. 이클립스에서 빨간밑줄로 알려줌.

 

<@Override 메소드 재정의>

부모 메소드에 존재하는 메소드를 서브 클래스에서 재정의하는 것을 의미. 이를 통해 부모 기능을 자식클래스만의 것으로 변화시키거나, 기존 부모 클래스의 기능과 자식 클래스의 기능을 합해 새로운 기능을 만들수도 있다.

package main;

public class Main {

	public static void main(String[] args) {
		Account ac1 = new Account("A씨", "100-88-9999",1000);
		CheckingCard c1 = new CheckingCard("B씨", "100-88-9999",1000, "A001");
		System.out.println(ac1.balance);
		System.out.println(c1.balance);
		ac1.deposit(1000);
		c1.deposit(1000);
		System.out.println(ac1.balance);
		System.out.println(c1.balance);
	}

}

 

package main;

public class Account {
	String name;
	String num;
	int balance;
	
	int withdraw(int amount) {
		if(amount > balance) {
			System.out.println("돈 읍따 그지야");
			return 0;
		}else {
			balance -= amount;
			return amount;
		}
	}
	
	void deposit(int amount) {
		balance += amount;
	}


	public Account(String name, String num, int balance) {
		this.name = name;
		this.num = num;
		this.balance = balance;
	}
	
}

 

package main;

public class CheckingCard extends Account {
	String cardNo;
	
	public CheckingCard(String name, String num, int balance, String cardNo) {
		super(name, num, balance);
		this.cardNo = cardNo;
	}
	
	int pay(int amount) {
		if(balance < amount) {
			System.out.println("돈 없는 주제에 카드 결재하지 마라");
			return 0;
		}else {
			return withdraw(amount);
		}
	}
	
	@Override
	void deposit(int amount) {		
		super.deposit(amount);
		balance += amount*2;
	}
}

 

<final>

final 필드

final이 의미하는 것처럼 final 필드는 최종적인 필드다. 

즉, final 필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행도중에 수정할 수 없다는 것

 

final 타입 필드 [= 초기값];

final 타입의 클래스는 상속이 불가하다.

 

상수(static final)

일반적으로 상수는 불변의 값을 의미한다. 하지만 final 필드를 상수라고 부르지 않는다. 왜냐면 불변의 값은 객체마다 저장할 필요가 없는 공용성을 가지고, 여러값으로 초기화될 수 없기 때문이다.

 

final 필드가 상수라

<abstract>

추상클래스

'구체적인 실체라기보다 실체들의 공통되는 특성을 가지고 있는 추상적인 것'

객체를 직접 생성할 수 있는 클래스 = 실체클래스

이러한 실체클래스들의 공통적 특성을 추출해 선언한 클래스 = 추상클래스

실체클래스와 추상클래스는 상속의 관계를 가진다.

추상 클래스는 실체클래스의 공통되는 필드와 메소들를 추출해서 만들었기 때문에 객체를 직접 생성해서 사용할 수 없다. 즉, 추상클래스는 new 연산자를 사용해 인스턴스를 생성할 수 없다.

Animal animal = new Animal(); (X 불가하다)

 

추상메소드와 오버라이딩(@Override)

추상메소드는 내용은 없지만 규칙과 질서를 주는 '규격'이라 할 수 있다. 

이는 여러명이 함께 개발할 때 메소드 이름에 규칙을 부여해서 세부내용은 다르더라도 속성에 따라 구분하기 편하게 하기 위함이다. 누가 퇴사하더라도 유지나 보수에 불편함이 없도록!

 

메소드의 선언만 통일화하고, 그 실행내용은 실체클래스마다 다르다.

자식 클래스는 반드시 추상 메소드를 재정의(@Override)해서 실행내용을 작성해야 한다.

public abstract class BaseBoard {
	/** 
	 * - 추상 메소드 - 
	 * 상속 받은 클래스에서 
	 * 무조건 오버라이드 하게해서 
	 * 이름 규칙을 만든다 
	 * 
	 * 기능을 물려받기 위한 것이 아님
	 * **/
	
	abstract void post();  // 글등록 입니다
	abstract void deletePost();  // 글삭제 입니다
}

-추상메소드인 BaseBoard-

 

public class FreeBoard extends BaseBoard {

	@Override
	void post() {
		// TODO Auto-generated method stub
		
	}

	@Override
	void deletePost() {
		// TODO Auto-generated method stub
		
	}

}

 

public class MemberBoard extends BaseBoard {

	@Override
	void post() {
		// TODO Auto-generated method stub
		
	}

	@Override
	void deletePost() {
		// TODO Auto-generated method stub
		
	}

}

 

<다형성>

다형성은 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말한다.

코드측면에서의 다형성은 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해준다.

다형성을 위해 자바는 부모클래스로 타입변환을 허용한다. 즉 부모 타입에 모든 자식 객체가 대입될 수 있다.

이를 통해 객체는 부품화가 가능해진다.

상속관계에서 자식클래스는 부모클래스 변수에 대입이 가능하다.

		Account ac2 = new CheckingCard("B씨", "100-88-9999",1000, "A001");
		ac2.deposit(1000);
		System.out.println(ac2.balance);
		
		Account ac3 = new CreditCard("B씨", "100-88-9999",1000, "A001");
		ac3.deposit(1000);
		System.out.println(ac3.balance);

 

자식클래스인 CheckingCard와 CreditCard는 부모클래스인 Account에 대입 가능하다.

Account로 정리할 수 있기 때문에 ac2와 ac3는 각각 체크카드, 신용카드라는 다른 클래스에 속하지만

ArrayList로도 묶여질 수 있다. 왜냐면 Account **으로 이름이 같으니까!

 

 

 

 

Mine

package Main;

public class Mama {

	String name;
	String breed;
	String color;
	String neutralization;
	int age;
	
//	public Mama(String string, String string2, String string3, String string4, int i) {
//		// TODO Auto-generated constructor stub
//	}

	int agestage() { // 두가지 조건 할때는 2 <= int <5가 아니라 &&로 이어서할 것
		if (age < 2) {
			System.out.println("청소년기입니다");
		}else if ( 2 <= age && age < 5 ) {
			System.out.println("청년기입니다");
		}else if ( 5 <= age && age < 7) {
			System.out.println("장년기입니다");
		}else {
			System.out.println("노년기입니다");
		}
		return 0; // void가 아니면 리턴값을 갖는다.
	}
	
	void eat() {
		System.out.println(name + "가 먹이를 먹는다");
	}void water(){
		System.out.println(name + "가 물을 마신다");
	}
	}
	

 

package Main;
//토끼
public class Animal2 extends Mama{
	void chew() {
		System.out.println(name +"풀을 씹는다" );
	}
	void hop() {
		System.out.println(name +"깡총거린다");
	}
	void stomp() {
		System.out.println(name +"뒷발을 구른다");
	}
	
}

 

package Main;
// 말
public class Animal3 extends Mama {

	void run() {
		System.out.println(name +"달린다" );
	}
	void walk() {
		System.out.println(name +"걷는다");
	}
	void stop() {
		System.out.println(name +"멈춘다");
	}
	void jump() {
		System.out.println(name +"점프한다");
	}
	void sound() {
		System.out.println(name +"히히힝 운다");
	}
	
}

 

'JAVA' 카테고리의 다른 글

Sep1_ Runnable  (0) 2020.09.01
파일저장_Stream  (0) 2020.08.31
SimpleGame_모범  (0) 2020.08.18
homework_메이즈 게임 만들기_Aug15~16, 17 (객체지향적 설계)  (0) 2020.08.14
Aug14, 18 _ 생성자, 접근제한자,Getter/Setter  (0) 2020.08.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함