20240819수업
abstract class
함수 안의 코드가 없는 클래스 =>기능 無
(↔concrete class:함수 안에 코드가 있는 클래스(구상클래스,일반클래스))
abstract class Pet{
String name;
void eat() {
System.out.println(name+"(이)가 사료를 먹습니다.");
}
abstract void sound();
}
- abstract메소드가 있으므로 class앞에 abstract를 붙여야한다.(abstract 필드나 클래스가 존재할때도 마찬가지)
- main의 eat과 sound만 접근가능
class Dog extends Pet{
void keeping() {
System.out.println(name+"(이)가 집을 지킨다");
}
@Override
void sound() {
System.out.println("멍멍");
}
}
class Cat extends Pet{
@Override
void sound() {
System.out.println("야옹");
}
}
public class TestMain {
action
public static void main(String[] args) {
Dog dog1=new Dog();
action(dog1,"츄");
Dog dog2=new Dog();
action(dog2,"바둑");
Cat cat1=new Cat();
action(cat1, "네로");
}
만약 같은 역할을 수행하는 두개 이상의 요소가 있는경우, action 객체로 기능을 구현할 수 있다.
private static void action(Pet pet, String name) {
pet.name=name;
pet.eat();
pet.sound();
- 부모 <- 자식 (O) :부모는 언제나 자식의 정보를 받을수있다. 단, 부모의 정보만 조작 가능하다(특별한 작업 없다면)
부모 -> 자식 (X); - pet.keeping();은 안됨. ∵pet이 접근할 수 있는 함수범위만 조작가능(keeping메서드는 Dog클래스에만 있음)
- 따라서 아래와 같이 if문을 생성한다.
if(pet instanceof Dog) {
- 펫으로 만든 주소가 도그의 주소(100)라면
=pet이 Dog class로 만들어진 instance라면
Dog d=(Dog) pet; //pet에 들어있는 주소를 Dog타입의 주소로 바꿔라
d.keeping(); //Dog type 함수인 keeping()을 d로 호출한다
}
}
Interface
모든 하위요소가 abstract일때 사용가능하다
class Duck {
public void swim() {
System.out.println("헤엄친다");
}
}
interface IRacoon {
//다형성:polymophism
public void dig();
}
abstract class Racoon이라고 작성하는 대신 interface IRacoon이라고 작성할 수 있다.
class DuckRacoon extends Duck implements IRacoon{
@Override
public void dig() {
System.out.println("땅을 판다");
// TODO Auto-generated method stub
}
}
public class TestMain {
public static void main(String[] args) {
DuckRacoon dr= new DuckRacoon();
dr.swim();
dr.dig();
}
}
DuckRacoon 클래스가 Duck클래스를 화장시키고 IRacoon을 구현한다.
implements를 오버라이딩 한다
main클래스에서 출력을 각각 가져온다.
심화예시
class Member {
//Field
private int id;
private String name;
private String tel;
// 기본 Constructor
public Member() {}
public Member(int id, String name, String tel) {
// super(); //부모 class(object)의 생성자를 호출한다.
this.id = id;
this.name = name;
this.tel = tel;
}
// toString()
@Override // 데이터만 중요한 클래스
public String toString() {
return "Member [id=" + id + ", name=" + name + ", tel=" + tel + "]";
}
@Override
public int hashCode() {
return Objects.hash(id, name, tel);
}
//member field data값을 비교
@Override
public boolean equals(Object obj) {//오브젝트-멩버타입도 스튜던트 타입도 다가능
boolean result = false;
Member m = (Member) obj;
if(m.id>0) //번호를 검색 id가 0보다 클떄
result=this.id==m.id;
else if(m.name!=null&&!m.name.equals(""))//이름으로 찾기 이름이 빈문자열이 아니거나 null이 아닐떄
result=this.name.equals(m.name);
else
result=this.tel.equals(m.tel); //id가 0보다 작거나 같거나 이름이 빈문자열이거나 null일떄
return result;
}
/*
* @Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Member other = (Member) obj;
return id == other.id && Objects.equals(name, other.name) && Objects.equals(tel, other.tel);
}
*/
}
public class TestMain {
public static void main(String[] args) {
Member m1 = new Member(1, "민지", "010");// 멤버객체가 인스턴스 된값만큼 넣음
Member[] mArr = new Member[] {
new Member(1, "민지", "010"),
new Member(2, "카리나", "011"),
new Member(3, "윈터", "012"),
new Member(4, "원영", "013"),
new Member(5, "유진", "014"),
new Member(6, "다니엘", "015"),
new Member(7, "민니", "016"),
new Member(8, "쯔위", "017"),
new Member(9, "사나", "018"),
new Member(10, "쯔위", "019") };
// 찾으려는 회원정보-번호로 찾기
Member m = new Member(3, null, null);
findMember(mArr, m);
// 이름으로 찾기
Member m2 = new Member(0, "카리나", "null");
findMember(mArr, m2);
// 전화번허으로 찾기
Member m3 = new Member(0, null, "017");
findMember(mArr, m3);
}
private static void findMember(Member[] mArr, Member m) {
Member mData =null;
boolean isFound = false; //이즈파운드 스위치 변수 플래그 변수
for (int i = 0; i < mArr.length; i++) {
if (mArr[i].equals(m)) {
mData=mArr[i];
isFound=true;
break; //for문 중지
}
}
if (isFound != true) {
System.out.println("못찾음");
}else {
System.out.println(mData);
}
}
}
'JAVA' 카테고리의 다른 글
[java]class에 모든 기능을 구현해서 출력 (0) | 2024.08.22 |
---|---|
[java]정렬하기(Sort), 람다식 (0) | 2024.08.21 |
[java]객체 개념 (0) | 2024.08.20 |
[java]getter/setter (0) | 2024.08.18 |
[java]Constructor, Override (0) | 2024.08.18 |