ν΄λμ€ μμκ³Ό κ°μ²΄
- μνΌ ν΄λμ€ κ°μ²΄μ μλΈ ν΄λμ€μ κ°μ²΄λ λ³κ°μ΄λ€.
- μλΈ ν΄λμ€ κ°μ²΄λ μνΌ ν΄λμ€ λ©€λ²λ₯Ό ν¬ν¨νλ€.
- μλΈ ν΄λμ€λ μνΌ ν΄λμ€μ private λ©€λ² μΈ λͺ¨λ λ©€λ²λ₯Ό μ κ·Όν μ μλ€.
μμ μ μΈκ³Ό κ°μ²΄
1. μμ μ μΈ - extends ν€μλ μ¬μ©
class ColorPoint extends Point { ... }
2. μλΈ ν΄λμ€ κ°μ²΄ μμ±
Point p = new Point();
ColorPoint cp = new ColorPoint(); // μλΈ ν΄λμ€ κ°μ²΄ μμ±
νΉμ§
- μλ°μμλ ν΄λμ€μ λ€μ€ μμμ μ§μνμ§ μλλ€.
- μλ°μ λͺ¨λ ν΄λμ€λ μλ°μμ μ 곡νλ Object ν΄λμ€λ₯Ό μλμΌλ‘ μμλ°λλ‘ μ»΄νμΌλλ€.
μμκ³Ό μμ±μ
μλΈ ν΄λμ€μ μνΌ ν΄λμ€μ μμ±μ νΈμΆ λ° μ€ν
class A {
public A() {
System.out.println("μμ±μA");
}
}
class B extends A {
public B() {
System.out.println("μμ±μB");
}
}
class C extends B {
public C() {
System.out.println("μμ±μC");
}
}
public class ConstructorEx {
public static void main(String[] args) {
C c;
c = new C();
}
}

- μλΈ ν΄λμ€μ κ°μ²΄κ° μμ±λ λ, μλΈ ν΄λμ€μ μμ±μμ μνΌ ν΄λμ€μ μμ±μκ° λͺ¨λ μ€νλλ€.
- μ΄λ μνΌ ν΄λμ€μ μμ±μκ° λ¨Όμ μ€νλλ€.
- μλΈ ν΄λμ€μ μμ±μκ° λ¨Όμ νΈμΆλμ§λ§, λ λμ€μ μ€νλλ€.
μλΈ ν΄λμ€μμ μνΌ ν΄λμ€ μμ±μ μ ν
1. μνΌ ν΄λμ€μ κΈ°λ³Έ μμ±μκ° λ¬΅μμ μΌλ‘ μ ν
class A2 {
public A2() {
System.out.println("μμ±μA");
}
public A2(int x) {
System.out.println("μμ±μA2");
}
}
class B2 extends A2 {
public B2() {
System.out.println("μμ±μB");
}
}
public class ConstructorEx2 {
public static void main(String[] args) {
B2 b;
b = new B2(); // μμ±μ νΈμΆ
}
}

- μλΈ ν΄λμ€μ κΈ°λ³Έ μμ±μμ λν΄ μ»΄νμΌλ¬λ μλμΌλ‘ μνΌν΄λμ€μ κΈ°λ³Έ μμ±μμ μ§μ λ§Ίλλ€.
class A3 {
public A3() {
System.out.println("μμ±μA");
}
public A3(int x) {
System.out.println("λ§€κ°λ³μμμ±μA");
}
}
class B3 extends A3 {
public B3() {
System.out.println("μμ±μB");
}
public B3(int x) {
System.out.println("λ§€κ°λ³μμμ±μB");
}
}
public class ConstructorEx3 {
public static void main(String[] args) {
B3 b;
b = new B3(5);
}
}

- μλΈ ν΄λμ€μ λ§€κ° λ³μκ° μλ μμ±μλ μνΌ ν΄λμ€μ κΈ°λ³Έ μμ±μμ μ§μ μ΄λ£¬λ€.
2. super()λ₯Ό μ΄μ©νμ¬ λͺ μμ μΌλ‘ μνΌ ν΄λμ€μ μμ±μ μ ν
class A4 {
public A4() {
System.out.println("μμ±μA");
}
public A4(int x) {
System.out.println("λ§€κ°λ³μμμ±μA" + x);
}
}
class B4 extends A4 {
public B4() {
System.out.println("μμ±μB");
}
public B4(int x) {
super(x); // 첫 μ€μ μμΌ ν¨
System.out.println("λ§€κ°λ³μμμ±μB" + x);
}
}
public class ConstructorEx4 {
public static void main(String[] args) {
B4 b;
b = new B4(5);
}
}

μ μΊμ€ν κ³Ό instanceof μ°μ°μ
- μΊμ€ν : νμ λ³ν -> μ μΊμ€ν / λ€μ΄μΊμ€ν μ
μ μΊμ€ν
Person p;
Student s = new Student();
p = s; // μ
μΊμ€ν
- μλΈ ν΄λμ€ κ°μ²΄κ° μνΌ ν΄λμ€ νμ μΌλ‘ λ³νλλ κ²
- μνΌ ν΄λμ€μ λ νΌλ°μ€κ° μλΈ ν΄λμ€ κ°μ²΄λ₯Ό κ°λ¦¬ν€λλ‘ μΉνλλ κ²
- μ μΊμ€ν ν λ νΌλ°μ€λ‘λ μνΌ ν΄λμ€μ λ©€λ²λ§ μ κ·Όν μ μλ€.
λ€μ΄μΊμ€ν
Student s = (Student)p; // λ€μ΄μΊμ€ν
, (Student)μ νμ
λ³νμ λ°λμ μ§μ
- μ μΊμ€ν λ μλΈ ν΄λμ€ κ°μ²΄λ₯Ό λ€μ μλλλ‘ λλ리λ κ²
instanceof μ°μ°μμ κ°μ²΄ ꡬλ³
κ°μ²΄λ νΌλ°μ€ instanceof ν΄λμ€νμ
// instance μ°μ°μ νμ© μμ
class Person { }
class Student extends Person { }
class Researcher extends Person { }
class Professor extends Researcher { }
public class InstanceOfEx {
static void print(Person p) {
if (p instanceof Person)
System.out.print("Person ");
if (p instanceof Student)
System.out.print("Student ");
if (p instanceof Researcher)
System.out.print("Researcher ");
if (p instanceof Professor)
System.out.print("Professor ");
System.out.println();
}
public static void main(String[] args) {
System.out.print("new Student() -> ");
print(new Student());
System.out.print("new Researcher() -> ");
print(new Researcher());
System.out.print("new Professor() -> ");
print(new Professor());
}
}

- λ νΌλ°μ€κ° κ°λ¦¬ν€λ κ°μ²΄κ° μ΄λ€ ν΄λμ€ νμ μΈμ§ ꡬλΆνκΈ° μν΄ μ¬μ©
- 'λ νΌλ°μ€'κ° κ°λ¦¬ν€λ κ°μ²΄κ° ν΄λΉ 'ν΄λμ€ νμ 'μ΄λ©΄ true, μλλ©΄ false
λ©μλ μ€λ²λΌμ΄λ©
class A {
void f() {
System.out.println("Aμ f() νΈμΆ");
}
}
class B extends A {
void f() { // Aμ f()λ₯Ό μ€λ²λΌμ΄λ©
System.out.println("Bμ f() νΈμΆ");
}
}

- μλΈ ν΄λμ€μμ μνΌ ν΄λμ€μ μ μΈλ λ©μλλ₯Ό μ€λ³΅ μμ±νμ¬ μνΌ ν΄λμ€μ μμ±λ λ©μλλ₯Ό 무λ ₯νμν΄.
- κ·Έλ¬λ©΄ μνΌ ν΄λμ€μ λ νΌλ°μ€λ₯Ό μ΄μ©νλ μλΈ ν΄λμ€μ λ νΌλ°μ€λ₯Ό μ΄μ©νλ νμ μλΈ ν΄λμ€μ μ€λ²λΌμ΄λ©ν λ©μλκ° μ€νλλ€.
- μλΈ ν΄λμ€μ μ€λ²λΌμ΄λ©ν λ©μλλ λ°λμ μνΌ ν΄λμ€μ μμ±λ λ©μλμ μ΄λ¦, λ¦¬ν΄ νμ , λ§€κ° λ³μ 리μ€νΈκ° λͺ¨λ κ°λλ‘ μμ±
μ€λ²λΌμ΄λ©μ λͺ©μ , λ€νμ± μ€ν

- μ€λ²λΌμ΄λ©μ μνΌ ν΄λμ€μ μ μΈλ λ©μλλ₯Ό, λμΌν μ΄λ¦μΌλ‘ κ° μλΈ ν΄λμ€μμ νμν λ΄μ©μΌλ‘ μλ‘ κ΅¬ννλλ° μλ€.
- μ€λ²λΌμ΄λ©μ μμμ ν΅ν΄ 'νλμ μΈν°νμ΄μ€μ μλ‘ λ€λ₯Έ λ΄μ© ꡬν'μ΄λΌλ κ°μ²΄ μ§ν₯μ λ€νμ±μ μ€ννλ λꡬμ΄λ€.
class Shape { // λνμ μνΌ ν΄λμ€
public void draw() {
System.out.println("Shape");
}
}
class Line extends Shape {
public void draw() { // λ©μλ μ€λ²λΌμ΄λ©
System.out.println("Line");
}
}
class Rect extends Shape {
public void draw() { // λ©μλ μ€λ²λΌμ΄λ©
System.out.println("Rect");
}
}
class Circle3 extends Shape {
public void draw() { // λ©μλ μ€λ²λΌμ΄λ©
System.out.println("Circle");
}
}
public class MethodOverridingEx {
static void paint(Shape p) { // Shapeμ μμλ°μ λͺ¨λ κ°μ²΄λ€μ΄ λ§€κ°λ³μλ‘ λμ΄μ¬ μ μμ
p.draw(); // pκ° κ°λ¦¬ν€λ κ°μ²΄μ μ€λ²λΌμ΄λ©ν draw() νΈμΆ. λμ λ°μΈλ©
}
public static void main(String[] args) {
Line line = new Line();
paint(line); // Lineμ draw() μ€ν. "Line" μΆλ ₯
// λ€μ νΈμΆλ€μ λͺ¨λ paint() λ©μλ λ΄μμ Shapeμ λν λ νΌλ°μ€ pλ‘ μ
μΊμ€ν
λ¨
paint(new Shape()); // Shapeμ draw() μ€ν. "Shape" μΆλ ₯
paint(new Line()); // μ€λ²λΌμ΄λ©λ λ©μλ Line()μ draw() μ€ν, "Line" μΆλ ₯
paint(new Rect()); // μ€λ²λΌμ΄λ©λ λ©μλ Rect()μ draw() μ€ν, "Rect" μΆλ ₯
paint(new Circle3()); // μ€λ²λΌμ΄λ©λ λ©μλ Circle()μ draw() μ€ν, "Circle" μΆλ ₯
}
}
λμ λ°μΈλ©
- μ€νν λ©μλλ₯Ό μ»΄νμΌ μμ κ²°μ νμ§ μκ³ μ€ν μμ κ²°μ νλ κ²
- μλ°μμλ λμ λ°μΈλ©μ ν΅ν΄ μ€λ²λΌμ΄λ©λ λ©μλκ° νμ μ€νλλλ‘ λ³΄μ₯νλ€.
public class SuperObject {
protected String name;
public void paint() {
draw();
}
public void draw() {
System.out.println("Super Object");
}
public static void main(String[] args) {
SuperObject a = new SuperObject();
a.paint();
}
}


public class SuperObject {
protected String name;
public void paint() {
draw();
}
public void draw() {
System.out.println("Super Object");
}
}
public class SubObject extends SuperObject {
public void draw() {
System.out.println("Sub Object");
}
public static void main(String [] args) {
SuperObject b = new SubObject();
b.paint();
}
}


μ€λ²λΌμ΄λ©κ³Ό super ν€μλ
- μλΈ ν΄λμ€μμ super ν€μλλ₯Ό μ΄μ©νλ©΄ μ μ λ°μΈλ©μ ν΅ν΄ μνΌ ν΄λμ€μ λ©€λ²μ μ κ·Όν μ μλ€.
super.μνΌν΄λμ€μλ©€λ²
@Override
- μ€λ²λΌμ΄λ©νλ λ©μλ μμ λΆμ
- μ»΄νμΌλ¬μκ² μ€λ²λΌμ΄λ©μ΄ μ ννμ§ νμΈνλλ‘ μ§μ
μ€λ²λ‘λ©(overloading) vs μ€λ²λΌμ΄λ©(overriding)
| λΉκ΅ μμ | λ©μλ μ€λ²λ‘λ© | λ©μλ μ€λ²λΌμ΄λ© |
| μ μΈ | κ°μ ν΄λμ€λ μμ κ΄κ³μμ λμΌν μ΄λ¦μ λ©μλ μ€λ³΅ μμ± | μλΈ ν΄λμ€μμ μνΌ ν΄λμ€μ μλ λ©μλμλμΌν μ΄λ¦μ λ©μλ μ¬μμ± |
| κ΄κ³ | λμΌν ν΄λμ€ λ΄ νΉμ μμ κ΄κ³ | μμ κ΄κ³ |
| λͺ©μ | μ΄λ¦μ΄ κ°μ μ¬λ¬ κ°μ λ©μλλ₯Ό μ€λ³΅ μ μΈνμ¬ μ¬μ©μ νΈλ¦¬μ± ν₯μ | μνΌ ν΄λμ€μ ꡬνλ λ©μλλ₯Ό 무μνκ³ μλΈν΄λμ€μμ μλ‘μ΄ κΈ°λ₯μ λ©μλλ₯Ό μ¬μ μνκ³ μ ν¨ |
| 쑰건 | λ©μλ μ΄λ¦μ λ°λμ λμΌν¨. λ©μλμ μΈμμ κ°μλ μΈμμ νμ μ΄ λ¬λΌμΌ μ±λ¦½ | λ©μλμ μ΄λ¦, μΈμμ νμ , μΈμμ κ°μ, λ¦¬ν΄ νμ λ±μ΄ λͺ¨λ λμΌνμ¬μΌ μ±λ¦½ |
| λ°μΈλ© | μ μ λ°μΈλ©. μ»΄νμΌ μμ μ€λ³΅λ λ©μλ μ€ νΈμΆλλ λ©μλ κ²°μ | λμ λ°μΈλ©. μ€ν μκ°μ μ€λ²λΌμ΄λ©λ λ©μλ μ°Ύμ νΈμΆ |
μΆμ ν΄λμ€
μΆμ λ©μλ
- abstract ν€μλμ ν¨κ» μνλ§ μ μΈλκ³ , μ½λλ μμ±λμ§ μμ λ©μλ
abstract public String getName(); // μΆμ λ©μλ
abstract public String fail() { return "Good Bye"; } // μΆμ λ©μλ μλ. μ»΄νμΌ μ€λ₯
μΆμ ν΄λμ€
- μΆμ λ©μλλ₯Ό μ΅μ ν κ° μ΄μ κ°μ§κ³ abstractλ‘ μ μΈλ ν΄λμ€
- μΆμ λ©μλκ° μμ΄λ abstractλ‘ μ μΈν ν΄λμ€
// μΆμ λ©μλλ₯Ό κ°μ§ μΆμ ν΄λμ€
abstract class Shape { // μΆμ ν΄λμ€ μ μΈ
public Shape() { ... }
public void edit() { ... }
abstract public void draw(); // μΆμ λ©μλ μ μΈ
}
// μΆμ λ©μλ μλ μΆμ ν΄λμ€
abstract class Jcomponent { // μΆμ ν΄λμ€ μ μΈ
String name;
public void load(String name) {
this.name = name;
}
}
- μΆμ λ©μλλ₯Ό κ°μ§κ³ μμΌλ©΄ λ°λμ μΆμ ν΄λμ€λ‘ μ μΈλμ΄μΌ νλ€.
- μΆμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ€.
Jcomponent p; // μ€λ₯ μμ. μΆμ ν΄λμ€μ λ νΌλ°μ€ μ μΈ
p = new JComponent(); // μ»΄νμΌ μ€λ₯. μΆμ ν΄λμ€μ μΈμ€ν΄μ€ μμ± λΆκ°
Shape obj = new Shape(); // μ»΄νμΌ μ€λ₯. μΆμ ν΄λμ€μ μΈμ€ν΄μ€ μμ± λΆκ°
μΆμ ν΄λμ€μ μμ
- μΆμ λ©μλλ₯Ό κ°μ§ μΆμ ν΄λμ€λ₯Ό μμλ°λ μλΈ ν΄λμ€λ μλμΌλ‘ μΆμ ν΄λμ€κ° λλ€.
- κ·Έλ¬λ―λ‘ μλΈ ν΄λμ€μ abstractλ₯Ό λΆμ¬ μΆμ ν΄λμ€μμ λͺ μν΄μΌ ν¨.
abstract class A { // μΆμ ν΄λμ€
abstract public int add(int x, int y); // μΆμ λ©μλ
}
abstract class B extends A { // μΆμ ν΄λμ€. μΆμ λ©μλ add()λ₯Ό μμλ°κΈ° λλ¬Έ
public void show() { System.out.println("B"); }
}
μΆμ ν΄λμ€μ ꡬν
- μλΈ ν΄λμ€μμ μνΌ ν΄λμ€μ λͺ¨λ μΆμ λ©μλλ₯Ό μ€λ²λΌμ΄λ©νμ¬ μ€ν κ°λ₯ν μ½λλ‘ κ΅¬ννλ κ²
- μΆμ ν΄λμ€λ₯Ό ꡬνν μλΈ ν΄λμ€λ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ€.
class C extends A { // μΆμ ν΄λμ€ κ΅¬ν. Cλ μ μ ν΄λμ€
@Override
public int add(int x, int y) { return x+y; } // μΆμ λ©μλ ꡬν. μ€λ²λΌμ΄λ©
public void show() { System.out.println("C"); }
}
μΆμ ν΄λμ€μ λͺ©μ
- μμμ μν μνΌ ν΄λμ€λ‘ νμ©νκΈ° μν κ²
- μΆμ ν΄λμ€λ μΆμ λ©μλλ₯Ό ν΅ν΄ μλΈ ν΄λμ€κ° ꡬνν λ©μλμ μνμ μλ €μ£Όλ μΈν°νμ΄μ€μ μν
- μλΈ ν΄λμ€μ λ€νμ±μ μ€ν
abstract class Calculator {
public abstract int add(int a, int b); // λ μ μμ ν©μ ꡬνμ¬ λ¦¬ν΄
public abstract int subtract(int a, int b); // λ μ μμ μ°¨λ₯Ό ꡬνμ¬ λ¦¬ν΄
public abstract double average(int[] a); // μ μ λ°°μ΄μ νκ· λ¦¬ν΄
}
public class GoodCalc extends Calculator {
@Override
public int add(int a, int b) { // μΆμ λ©μλ ꡬν
return a+b;
}
@Override
public int subtract(int a, int b) { // μΆμ λ©μλ ꡬν
return a-b;
}
@Override
public double average(int[] a) { // μΆμ λ©μλ ꡬν
double sum = 0;
for (int i=0; i<a.length; i++)
sum += a[i];
return sum/a.length;
}
public static void main(String[] args) {
GoodCalc c = new GoodCalc();
System.out.println(c.add(2, 3));
System.out.println(c.subtract(2, 3));
System.out.println(c.average(new int [] {2, 3, 4}));
}
}
μΈν°νμ΄μ€
interface PhoneInterface { // μΈν°νμ΄μ€ μ μΈ
public static final int TIMEOUT = 10000; // μμ νλ. public static final μλ΅ κ°λ₯
public abstract void sendCall(); // μΆμ λ©μλ. public static abstract μλ΅ κ°λ₯
public abstract void receiveCall(); // μΆμ λ©μλ. public static abstract μλ΅ κ°λ₯
public default void printLogo() { // λν΄λ λ©μλλ public μλ΅ κ°λ₯
System.out.println("** Phone **");
} // λν΄νΈ λ©μλ
}
- interface ν€μλλ₯Ό μ¬μ©νμ¬ μ μΈ
- 5 μ’ λ₯μ λ©€λ²λ‘ ꡬμ±λλ©°, νλ(λ©€λ² λ³μ)λ₯Ό λ§λ€ μ μλ€.
· μμ, μΆμ λ©μλ, default λ©μλ, private λ©μλ, static λ©μλ
· μμ: public static final μμ±μ΄λ©°, μμ±μ μλ΅ κ°λ₯
· μΆμ λ©μλ: public abstract μμ±μ΄λ©°, μμ±μ μλ΅ κ°λ₯
· default λ©μλ: μ κ·Ό μ§μ publicμΌλ‘ κ³ μ
· private λ©μλ: μΈν°νμ΄μ€ λ΄μ λ€λ₯Έ λ©μλμμλ§ νΈμΆ κ°λ₯
· static λ©μλ: μ κ·Ό μ§μ μ΄ μλ΅λλ©΄ publicμ΄λ©°, privateμΌλ‘ μ§μ κ°λ₯
· default, private, static λ©μλλ€μ μ½λκ° μμ±λμ΄ μμ΄μΌ νλ€.
- μΈν°νμ΄μ€λ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
μΈν°νμ΄μ€ μμ
- μμμ ν΅ν΄ κΈ°μ‘΄ μΈν°νμ΄μ€μ μλ‘μ΄ κ·κ²©μ μΆκ°ν μλ‘μ΄ μΈν°νμ΄μ€λ₯Ό λ§λ λ€.
interface MobilePhoneInterface extends PhoneInterface {
void sendSMS(); // μΆμ λ©μλ
void receiveSMS(); // μΆμ λ©μλ
}
- μ΄λ κ² ν¨μΌλ‘μ¨, MobilePhoneInterface μΈν°νμ΄μ€λ μ΄ 6κ°μ λ©€λ²λ₯Ό κ°μ§κ² λλ€.
- μΈν°νμ΄μ€λ μ½€λ§λ‘ μ°κ²°νμ¬ 2κ° μ΄μμ μΈν°νμ΄μ€λ₯Ό λ€μ€ μμν μ μλ€.
interface MusicPhoneInterface extends PhoneInterface, MP3Interface {
...
}
μΈν°νμ΄μ€ ꡬν
- implements ν€μλλ₯Ό μ¬μ©νμ¬ μΈν°νμ΄μ€μ λͺ¨λ μΆμ λ©μλλ₯Ό ꡬνν ν΄λμ€λ₯Ό μμ±νλ κ²
class SamsungPhone implements PhoneInterface { // μΈν°νμ΄μ€ ꡬν
// PhoneInterfaceμ λͺ¨λ μΆμ λ©μλ ꡬν
public void sendCall() { System.out.println("λ 리리리λ§"); }
public void receiveCall() { System.out.println("μ νκ° μμ΅λλ€."); }
// λ©μλ μΆκ° μμ±
public void flash() { System.out.println("μ νκΈ°μ λΆμ΄ μΌμ‘μ΅λλ€."); }
}
'π£οΈ > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [Java] ν΄λμ€μ κ°μ²΄ (0) | 2022.02.11 |
|---|---|
| [Java] λ°°μ΄ / μμΈμ²λ¦¬ (0) | 2022.02.10 |
| [Java] μλ° κΈ°λ³Έ νλ‘κ·Έλλ° (νλ‘κ·Έλ¨ κ΅¬μ‘°, λ°μ΄ν° νμ , ν€ μ λ ₯) (0) | 2022.02.05 |