목차
Interface의 상속
- Java는 다중상속이 허용되지 않기 때문에
Interface
가 발달되어 있다.public class Ex05 extends Object implements Inter01{ public static void main(String[] args) { Ex05 me = new Ex05(); Object me1 = new Ex05(); Inter01 me2 = new Ex05();
implements
를 사용한 상속
interface Inter01{
public static final int su = 1111;
int su2 = 2222;
// int su3; // 초기화를 하지 않으면 선언 불가능 (final이 숨겨져있기 때문에)
public abstract void func01(); // interface는 추상 메서드만 가질 수 있다.
public void func02(); // abstract 키워드 생략가능
void func03(); // override해서 사용해야 하기 때문에 public 생략가능
}
public class Ex05 implements Inter01{
public static void main(String[] args) {
Ex05 me = new Ex05();
Inter01 me2 = new Ex05();
me2.func01();
me2.func02();
me2.func03();
}
@Override
public void func01(){
}
@Override
public void func02(){
}
@Override
public void func03(){
}
}
클래스와 인터페이스의 상속이 가능해진다.
interface Inter02{
void func01();
}
interface Inter03{
void func02();
}
interface Inter04 extends Inter02{} // 인터페이스에서 상속할때는 extends 사용
interface Inter05 extends Inter02, Inter03{} // 여러개의 인터페이스 상속 가능
interface Inter06{} // 인터페이스는 추상메서드를 생성하지 않아도 가능하다.
public class Ex06 implements Inter05{
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public void func01() {
}
public void func02() {
}
}
-> 인터페이스는 여러개의 상속이 가능한다.
-> 인터페이스끼리는 extends로 상속한다.
인터페이스는 추상메서드만 가질 수 있다.
- 생성자와 일반 구현 메서드, 필드는 가질 수 없다.
- 하지만 static final 필드는 가질 수 있다.
- 생성자와 일반 구현 메서드, 필드는 가질 수 없다.
interface Inter01{
public static final int su = 1111;
int su2 = 2222;
// int su3; // 초기화를 하지 않으면 선언 불가능 (final이 숨겨져있기 때문에)
public abstract void func01(); // interface는 추상 메서드만 가질 수 있다.
public void func02(); // abstract 키워드 생략가능
void func02(); // override해서 사용해야 하기 때문에 public 생략가능
}
Cloneable 인터페이스가 붙은 클래스는 clone이 가능함
class Lec08 implements Cloneable{
int su = 1111;
void func() {
System.out.println(su);
}
}
public class Ex08 {
public static void main(String[] args) throws Exception{
int[] arr = {1, 3, 5};
Object obj1 = arr.clone();
Lec08 lec1 = new Lec08();
Object obj2 = lec1.clone(); //
}
}
public class Ex09 implements Cloneable{
public static void main(String[] args) throws Exception {
Ex09 me = new Ex09();
Object obj = me.clone();
System.out.println(me);
System.out.println(obj);
}
}
java.lang 클래스
public class Ex10 {
int a = 111;
String msg = "abcd";
public static void main(String[] args) throws Exception {
// System
// 출력
java.io.PrintStream ps = System.out;
ps.println("출력");
// Scanner
java.io.InputStream is = System.in;
java.util.Scanner sc;
sc = new java.util.Scanner(is);
ps.println(sc.nextLine());
// 시간
long time = System.currentTimeMillis(); // January 1, 1970 UTC부터 흐른 현재시간 출력
System.out.println(time / 1000);
long before = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++) {
new Ex10();
}
long after = System.currentTimeMillis();
System.out.println(after - before);
// java 강제종료
// System.exit(0); // 뒤의 숫자는 아무 의미가 없다. - java는 VM에서 실행되기 때문.
System.out.println("종료");
// garbage collector
System.gc(); // 대체로 io때 자동적으로 실행된다.
// Math
System.out.println(Math.random()); // final static 메서드
int su = -11;
System.out.println(Math.abs(su));
System.out.println(Math.min(3, 5));
System.out.println(Math.max(3, 5));
double su2 = 3.14;
System.out.println(Math.ceil(su2)); // 올림
System.out.println(Math.floor(su2)); // 버림
System.out.println(Math.round(su2)); // 반올림
// Class
// - 자바 리플렉션
Class cls; // 클래스에 대한 정보를 갖고있는 클래스
Ex10 me = new Ex10();
cls = me.getClass();
Class cls2 = Ex10.class;
Class cls3 = Class.forName(cls.getName());
System.out.println(cls.getName());
System.out.println(cls.getCanonicalName());
System.out.println(cls.getTypeName());
System.out.println(java.util.Arrays.deepToString(cls.getAnnotations()));
System.out.println(java.util.Arrays.deepToString(cls.getConstructors()));
System.out.println(java.util.Arrays.deepToString(cls.getDeclaredAnnotations()));
System.out.println(java.util.Arrays.deepToString(cls.getDeclaredConstructors()));
System.out.println(java.util.Arrays.deepToString(cls.getDeclaredFields()));
System.out.println(java.util.Arrays.deepToString(cls.getDeclaredMethods()));
Object obj = cls.newInstance();
System.out.println(((Ex10)obj).msg);
Object obj2 = cls3.newInstance();
System.out.println(((Ex10)obj2).msg);
}
}
'100일 챌린지 > 빅데이터기반 인공지능 융합 서비스 개발자' 카테고리의 다른 글
Day10 - 동적할당, 자료 구조, List와 Set (0) | 2024.08.02 |
---|---|
Day09 - Wrapper 클래스 (0) | 2024.08.01 |
Day 07 - 상속 (0) | 2024.07.30 |
Day 06 - break, return, continue 그리고 배열 복사와 String의 기능들 (0) | 2024.07.29 |
Day05 - 배열과 문자열 (0) | 2024.07.26 |