어제거 복습
#추상 클래스 abstract class : 무조건 상속
#추상 메소드 abstract meghod : 무조건 오버라이딩 (상속을 받아야한다는 말)
class 내에 한 개이상의 추상메소드가 존재한다면 그 클래스는 abstract class로 만들어줘야 한다.
다형성
부모의 참조변수로 자식들의 class를 참조하는 것.
예시
(조상클래스)
class Soldier
String name;
String level;
method 인사();
(자손클래스)
병장 - method 짱박();
상병 - method 갈굼();
일병 - method 일하기();
이병 - method 어리버리();
이전에는
병장 b = new 병장();
다형성 사용하면
(부모의 참조변수로 자식들의 class를 참조, 상속관계에서만 가능, 자손간에는 불가능)
Soldisr s = new 병장();
s.name;
s.level;
s.인사();
>접근가능
s.짱박();
>접근불가능
짱박을 쓰려면 (s를 형변환!)
병장 b = (병장)s
b는 s와 같은 주소값을 참조하지만 (b와s는 주소값이 같음!)
b.name
b.level
b.인사();
b.짱박();
짱박();메소드도 불러올 수 있다.
병장 [] ar = new 병장[3];
##################################################
public abstract class Weapon {
String name;
public abstract void prn();
}
public class Sword extends Weapon{
String name="검";
//검을 나타내는 메소드랑 변수 선언;
@Override
public void prn() {
System.out.println(name);
}
}
public class Axe extends Weapon {
String name = "도끼";
int thunder=2;
//변수랑 메소드;
@Override
public void prn() {
System.out.println(name);
System.out.println(thunder);
}
}
public class Knight {
String name;
Weapon s = new Sword();
public void prn(){
s.prn();
}
}
###############################################
인터페이스란 ? : 클래스라고 생각하면 된다.
인터페이스 : 추상클래스의 일종이라고 생각하자.
일반적으로 인터페이스, 구현이 더 많이 쓰인다.
-일종의 추상클래스. 추상클래스(미완성 설계도)보다 추상화 정도가 높다.
-실제 구현된 것이 전혀 없는 기본 설계도.(알맹이 없는 껍데기)
-추상메서드와 상수만을 멤버로 가질 수 있다.
-인스턴스를 생성할 수 없고, ...........
-이하 10장 교본 참고할 것
#
src 소스 우클릭 > new > Interface > 이름
public interface Test {
//상수
//추상메서드
}
//추상클래스
//멤버변수
//생성자
//멤버메서드
//추상메서드
public class Test2 implements Test {
}
구현, 상속 동시에 가능함, 그리고 두개이상 구현 가능
다중구현 : 상속의 단점을 보완
public class Sword extends Weapon implements Test, Test3
> 두개이상 구현가능, 상속과 동시사용가능
####################################
oracle > download > Java for Developers > Download 옆에 Documentation
>가운데 네모 누르고
Reference
http://docs.oracle.com/javase/8/docs/api/index.html
###########################################
자주사용하는 클래스
1.Object 클래스
(Object클래스는 모든 클래스의 조상클래스이다.)
(최고 조상이라는 것에 의의를 둔다.)
-오직 11개의 메서드만을 가지고 있다.
java.lang에서 Object, String 찾아보기
######################################
package Test;
public class Test1 {
int a;
int b;
}
#################################
package Test;
public class TMain {
public static void main(String[] args) {
Test1 t1 = new Test1();
t1.a=10;
t1.b=20;
Test1 t2 = new Test1();
t2.a=10;
t2.b=20;
System.out.println(t1.equals(t2));
}
}
빨간부분을 변경함
equals ( ) 괄호안에 object를 넣어야한다 t2 (t2는 Test1 클래스타입)
(Test1 클래스는 Object클래스의 자손. Test1 t1 = new Test1(); 일종의 다형성)
결과
>false
#################################################
package Test;
public class TMain {
public static void main(String[] args) {
Test1 t1 = new Test1();
t1.a=10;
t1.b=20;
Test1 t2 = new Test1();
t2.a=10;
t2.b=20;
System.out.println(t1.equals(t2)); // t1 == t2 비교
System.out.println(t1.toString());
System.out.println(t1);
}
}
결과
false
Test.Test1@659e0bfd
Test.Test1@659e0bfd
소스 > 오버라이딩
package Test;
public class Test1 {
int a;
int b;
@Override
public String toString() {
// TODO Auto-generated method stub
return super.toString();
}
}
###############################################
package Test;
public class Test1 {
int a;
int b;
@Override
public String toString() {
System.out.println("a:"+a);
System.out.println("b:"+b);
return "";
}
}
#############################################
Test의 멤버변수 a, b
t1과 t2의 a,b가 같으면 트루 다르면 폴스 출력하기
package Test;
public class Test1 {
int a;
int b;
@Override
public String toString() {
System.out.println("a:"+a);
System.out.println("b:"+b);
return "";
}
@Override
public boolean equals(Object obj) {
Test1 t = (Test1)obj;
if(this.a == t.a && this.b==t.b){
return true;
}else{
return false;
}
}
}
package Test;
public class TMain {
public static void main(String[] args) {
Test1 t1 = new Test1();
t1.a=10;
t1.b=20;
Test1 t2 = new Test1();
t2.a=10;
t2.b=20;
//t1.toString();
System.out.println(t1.equals(t2));
}
}
결과
>
true
########################################
package Test;
public class TMain {
public static void main(String[] args) {
Test1 t1 = new Test1();
t1.a=10;
t1.b=20;
Test1 t2 = new Test1();
t2.a=10;
t2.b=20;
//t1.toString();
System.out.println(t1.equals(t2));
System.out.println(t1);
System.out.println(t1.toString());
System.out.println(t1.hashCode());
}
}
결과
>
true
a:10
b:20
a:10
b:20
1704856573 // t1의 주소값 (16진수에서 10진수로)
'프로그래밍, 통계학 > Java Fundamental' 카테고리의 다른 글
[16일차]2015.07.30.목, 자주사용하는 클래스 (0) | 2015.07.30 |
---|---|
[15일차]2015.07.29.수, StringBuffer,StringTokenizer (0) | 2015.07.29 |
[13일차]2015.07.27, 제어자, 추상클래스 , 다형성 (0) | 2015.07.27 |
[12일차]2015.07.24.금, 패키지 (0) | 2015.07.24 |
[11일차]2015.07.23, 연습 (0) | 2015.07.23 |