생성자가 없는 클래스를 만들면 컴파일러가 입력 매개 변수가 없는 기본 생성자를 추가해준다.
class A{
int m;
void work(){ ... }
A() {
}
}
package oop5;
public class PointTest {
public static void main(String[] args) {
// Point2D pt1 = new Point2D(100, 200);
// System.out.println("x = " + pt1.x);
// System.out.println("y = " + pt1.y);
// Point2D pt2 = new Point2D();
// System.out.println("x = " + pt2.x);
// System.out.println("y = " + pt2.y);
// Point3D pt3 = new Point3D(1000, 2000, 3000);
// System.out.println("x = " + pt3.x);
// System.out.println("y = " + pt3.y);
// System.out.println("z = " + pt3.z);
Point3D pt4 = new Point3D();
System.out.println("x = " + pt4.x);
System.out.println("y = " + pt4.y);
System.out.println("z = " + pt4.z);
}
}
package oop5;
public class Point2D {
int x;
int y;
public Point2D() {
// this.x = 1;
// this.y = 2;
this(1,2);
System.out.println("Point2D() 수행");
}
public Point2D(int x, int y) {
this.x = x; // this를 통해 필드에 있는 x로 접근
this.y = y;
System.out.println("Point2D(x,y) 수행");
}
}
package oop5;
public class Point3D extends Point2D{
int z;
public Point3D(int x, int y, int z) {
super(x, y);
this.z = z;
System.out.println("Point3D(x,y,z) 수행");
}
public Point3D() {
this(10, 20, 30);
System.out.println("Point3D() 수행");
}
}
file > export > java > jar file > next > 대상파일선택 > 경로 및 파일 이름 설정 > finish
package exam.lib;
public class Dice {
// public void roll() { // 자바 콘솔에서만 기능을 수행할 수 있다.
// System.out.println((int)(Math.random() * 6 + 1));
// }
public int roll2() { // 안드로이드나 웹에서도 사용할 수 있다.
return (int)(Math.random() * 6 + 1);
}
}
프로젝트 우클릭 > properties > java build path > classpath > add external jars > jar파일 선택 > apply and close
package imp;
import exam.lib.Dice;
public class DiceTest {
public static void main(String[] args) {
Dice dice = new Dice();
System.out.println(dice.roll2());
}
}
package oop6;
public class AccountTest {
public static void main(String[] args) {
Account a1 = new Account(10000);
System.out.println(a1);
Account a2 = new Account(10000);
System.out.println(a2);
Account a3 = new Account(10000);
System.out.println(a3);
}
}
package oop6;
public class Account {
int money1;
int money2;
public Account(int money) {
this.money1 += money;
this.money2 += money;
}
@Override
public String toString() {
return "money1: " + money1 + ", money2:" + money2;
}
}
package oop7;
public class Singleton {
public static Singleton singleton = null;
int score;
private Singleton() {
// 1. 생성자를 private
// 2. 자기자신을 참조하는 변수를 static으로 선언
}
public static Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
// 1. 생성자를 private
// 2. 자기자신을 참조하는 변수를 static으로 선언
// 3. 처음 1회만 인스턴스를 생성하고 리턴하는 메소드 직
}
package oop7;
public class SingletonTest {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
System.out.println(s1);
System.out.println(s1.getClass());
System.out.println(s1.hashCode());
Singleton s2 = Singleton.getInstance();
System.out.println(s2);
System.out.println(s2.getClass());
System.out.println(s2.hashCode());
}
}
package pt1;
class A {}
class B extends A {}
class C extends B {}
class D extends B {}
public class Typecasting_1 {
public static void main(String[] args) {
A ac = (A) new C();
B bc = (B) new C();
B bb = new B();
A a = (A) bb;
A aa = new A();
A ab = new B();
B b = (B) ab;
B bd = new D();
D d = (D) bd;
A ad = new D();
B b1 = (B) ad;
D d1 = (D) ad;
}
}
package pt2;
class A {
int m = 3;
void abc() {
System.out.println("A 클래스");
}
}
class B extends A{
int n = 4;
void bcd() {
System.out.println("B 클래스");
}
}
public class Typecasting_2 {
public static void main(String[] args) {
A aa = new A();
System.out.println(aa.m);
aa.abc();
B bb = new B();
System.out.println(bb.m);
System.out.println(bb.n);
bb.abc();
bb.bcd();
A ab = new B();
System.out.println(ab.m);
ab.abc();
}
}
package pt3;
class A{}
class B extends A{}
public class Typecasting_3 {
public static void main(String[] args) {
// instance of
A aa = new A();
A ab = new B();
System.out.println(ab instanceof A);
System.out.println(aa instanceof B);
System.out.println(ab instanceof B);
if(aa instanceof B) {
B b = (B) aa;
System.out.println("aa를 B로 캐스팅했습니다.");
} else {
System.out.println("aa는 B타입으로 캐스팅이 불가능!!!");
}
if(ab instanceof B) {
B b = (B) ab;
System.out.println("ab를 B로 캐스팅했습니다.");
} else {
System.out.println("ab는 B 타입으로 캐스팅이 불가능!!!");
}
if("안녕" instanceof String) {
System.out.println("\"안녕\"은 String 클래스입니다.");
}
}
}
package oop9;
public class HyundaiTV {
public void powerOn() {
System.out.println("HyundaiTV: 전원을 켭니다.");
}
public void powerOff() {
System.out.println("HyundaiTV: 전원을 끕니다.");
}
public void ChannelUp() {
System.out.println("HyundaiTV: 채널을 올립니다.");
}
public void ChannelDown() {
System.out.println("HyundaiTV: 채널을 내립니다.");
}
public void soundUp() {
System.out.println("HyundaiTV: 소리를 키웁니다.");
}
public void soundDown() {
System.out.println("HyundaiTV: 전원을 줄입니다.");
}
}
package oop9;
public class TVTest {
public static void main(String[] args) {
TV tv = new HyundaiTV();
// TV tv = new SamsungTV();
tv.powerOn();
tv.powerOff();
tv.ChannelUp();
tv.ChannelDown();
tv.soundUp();
tv.soundDown();
}
}
package oop9;
// 인터페이스에서는 public abstract를 굳이 명시해주지 않아도 알아서 인식한다.
public interface TV {
public abstract void powerOn();
public abstract void powerOff();
public abstract void ChannelUp();
public abstract void ChannelDown();
public abstract void soundUp();
public abstract void soundDown();
}
package oop9;
public interface Speaker {
public void soundUp();
public void soundDown();
}
package oop9;
public class HarmanSpeaker implements Speaker{
public void soundUp(){
System.out.println("HarmanSpeaker: 소리를 키웁니다.");
}
public void soundDown() {
System.out.println("HarmanSpeaker: 소리를 줄입니다.");
}
}
package oop9;
public class OrangeSpeaker implements Speaker{
public void soundUp(){
System.out.println("OrangeSpeaker: 소리를 키웁니다.");
}
public void soundDown() {
System.out.println("OrangeSpeaker: 소리를 줄입니다.");
}
}
package oop9;
public class SamsungTV implements TV{
// private Speaker speaker = new OrangeSpeaker();
private Speaker speaker;
public void setSpeaker(Speaker speaker) {
this.speaker = speaker;
}
public void powerOn(){
System.out.println("SamsungTV: 전원을 켭니다.");
}
public void powerOff() {
System.out.println("SamsungTV: 전원을 끕니다.");
}
public void ChannelUp() {
System.out.println("SamsungTV: 채널을 올립니다.");
}
public void ChannelDown() {
System.out.println("SamsungTV: 채널을 내립니다.");
}
public void soundUp() {
if(speaker == null) {
System.out.println("SamsungTV: 소리를 키웁니다.");
} else {
speaker.soundUp();
}
}
public void soundDown() {
if(speaker == null) {
System.out.println("SamsungTV: 소리를 줄입니다.");
} else {
speaker.soundDown();
}
}
}
tv = oop9.SamsungTV
speaker = oop9.HarmanSpeaker
// speaker = oop9.OrangeSpeaker