on
java 수업 DAY 21 // interface, Comparable
java 수업 DAY 21 // interface, Comparable
추상적인 개념을 구체화
슈퍼클래스는 대부분 추상적 서브클래스는 구체적
final 로 상속을 금지시킬 수 있다
중복정의 - 타입이랑 갯수만 다른 것
자식한테 똑같은 이름을 가지는 필드를 만들지 말것
추상 메소드 - 현재의 클래스에서 구체적으로 작성할수 없는 메소드
ex) 넓이를 구하는데 삼각형 사각형 넓이 구하는 것이 다름 고로 구체적으로 적을수 없음
바디 가 없어서 ;로 끝낸다
추상클래스는 인스턴스화가 되지 않는다
다중상속 - a 를 상속받는 c를 만들고 인터페이스 ( ->클래스 여러개 구현)
인터페이스는 동작을 할 수 있다 - 추상적임 - 구연하는 클래스가 각각 구현을 할 것이다
public class Main { public static void main(String[] args) { // MyFirstInterface m = new MyFirstInterface(); - 불가 MyFirstInterface m = new MySubClass(); // 인터페이스 타입으로 섭클래스 참조 가능 m.sayHello(); // m.printState(); 는 불가 MySubClass m1 = new MySubClass(); m1.sayHello(); m1.printState(); MySuperClass m2 = new MySubClass(); // 할 수 있는 것이 없음 MySecondInterface m4 = new MySubClass(); // 똑같은 모양인데 다양한 타입으로 가능 m4.printState(); } }
public interface MyFirstInterface { // 추상 메소드만을 가질 수 있음. // 행동 void sayHello(); // public 생략을 해도 public 이다 // 무조건 public 인터페이스 안은 public 하다 // abstract 도 생략가능 } interface MySecondInterface { public abstract void printState(); }
public class MySuperClass { } class MySubClass extends MySuperClass implements MyFirstInterface, MySecondInterface{ // MySuperClass를 상속하고 MyFirstInterface를 구현한다 // interface에서 추상메소드 작성후 오버라이드 해야한다 @Override public void sayHello() { } @Override public void printState() { } }
public class Animal { private int age; public Animal(int age) { this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Animal [age=" + age + "]"; } }
public interface Flyable { void fly(); }
public class Eagle extends Animal // 독수리는 날 수 있는 동물이다 implements Flyable{ private int wingSpan; public Eagle(int age, int wingSpan) { super(age); this.wingSpan = wingSpan; } @Override public void fly() { System.out.println("날아다님"); } public int getWingSpan() { return wingSpan; } public void setWingSpan(int wingSpan) { this.wingSpan = wingSpan; } @Override public String toString() { return "Eagle [wingSpan=" + wingSpan + "]"; } }
public class Dog extends Animal{ private String hairColor; public Dog(int age, String hairColor) { super(age); this.hairColor = hairColor; } public String getHairColor() { return hairColor; } public void setHairColor(String hairColor) { this.hairColor = hairColor; } @Override public String toString() { return "Dog [hairColor=" + hairColor + "]"; } }
public class Main { public static void main(String[] args) { // Animal a; // Flyable f; // Eagle e; // Dog d; Eagle e = new Eagle(3, 1); Dog d = new Dog(4, "흰색"); e.setAge(4); e.getAge(); e.getWingSpan(); d.getHairColor(); Animal aEagle = e; // 상향 캐스팅 Animal aDog = d; // Animal 특성만 e.fly(); Flyable flyable = new Eagle(4, 2); flyable.fly(); // flyable.WingSpan(); // 불가 } }
동물에다가 implement 를 하게 되면 강아지도 날 수 있게 된다
인터페이스 - 상호소통의 수단 - 상호소통에 대한 약속
public interface Smartphone { void powerOn(); } interface AndroidPhone extends Smartphone { // 인터페이스도 상속가능 다만 인터페이스 여야한다 void backButton(); } interface ApplePhone { }
public interface MyInterface { // 추상적인 것 이외에도 가질 수 있다 // 1. 상수 double PI = 3.14; // public static final 생략 되어있음 public static void sayHello() { // static한 메소드를 가질 수 있다 System.out.println("Hello"); } public default void someMethod() { System.out.println("디폴트 행동"); } // 꼭 override 하지 않아도 됨 } class MyImpl implements MyInterface{ @Override public void someMethod() { System.out.println("새롭게 정의된 행동"); } }
public class Main { public static void main(String[] args) { System.out.println(MyInterface.PI); // MyInterface.PI = 44.44; // 값 변경 불가 MyInterface.sayHello(); MyImpl impl = new MyImpl(); impl.someMethod(); } }
출력
3.14
Hello
새롭게 정의된 행동
interface ComparablePerson { // 다른 사람이랑 비교가 가능하다 String compareTo(Person otherPerson); // 추상메소드 } class Person implements ComparablePerson { public int height; public int weight; public Person(int height, int weight) { this.height = height; this.weight = weight; } @Override public String compareTo(Person otherPerson) { // 대소를 비교 해야 해서 만드는 것 if (this.height > otherPerson.height) { // 참조 비교 ㄴㄴ 대소 비교 크기 비교 return "크다"; } else if (this.height == otherPerson.height) { return "같다"; } else { return "작다"; } } @Override public boolean equals(Object obj) { // object 클래스 에 있는 메소드 동등함이 있다 없다 if (this == obj) { return true; } if (!(obj instanceof Person)) { return false; } Person other = (Person) obj; if (height != other.height) { return false; } if (weight != other.weight) { return false; } return true; } @Override public String toString() { return "Person [height=" + height + ", weight=" + weight + "]"; } } public class Main { public static void main(String[] args) { Person p1 = new Person(180, 77); Person p2 = new Person(177, 66); String result = p1.compareTo(p2); System.out.println(result); } }
자바에 있는 기능으로 ↓
class Person implements Comparable { // Comparable 비교가능 해주는 것이 존재함 public int height; public int weight; public Person(int height, int weight) { this.height = height; this.weight = weight; } @Override public int compareTo(Person o) { // 리턴타입은 int 양수 리턴 크다 0 같 음수 작다 return this.height - o.height; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (height != other.height) return false; if (weight != other.weight) return false; return true; } @Override public String toString() { return "Person [height=" + height + ", weight=" + weight + "]"; } } public class Main { public static void main(String[] args) { Person p1 = new Person(180, 77); Person p2 = new Person(177, 66); // String result = p1.compareTo(p2); // System.out.println(result); int result = p1.compareTo(p2); System.out.println(result); } }
public class Main { public static void main(String[] args) { Person p1 = new Person(180, 77); Person p2 = new Person(177, 66); Person p3 = new Person(195, 88); Person p4 = new Person(166, 56); Person[] arr = { p1, p2, p3, p4 }; //정렬시 대소비교를 할 수 있어야 정렬이 가능 // 그래서 대소비교 가능하게 만들었다 Arrays.sort(arr); System.out.println(Arrays.toString(arr)); // String result = p1.compareTo(p2); // System.out.println(result); int result = p1.compareTo(p2); System.out.println(result); } }
from http://hiapprendre.tistory.com/38 by ccl(A) rewrite - 2021-12-25 19:02:08