[계산] //[1번] 다음 main() 메소드와 실행 결과를 참고하여 //TV를 상속받은 ColorTV 클래스를 작성하라. //32인치 1024컬러 class TV3 { private int size; // private을 사용하는 이유 : 정보은닉 public TV3(int size) { this.size = size; } protected int getSize() { return size; } } class ColorTV1 extends TV3 { private int color; public ColorTV1(int size, int color) { super(size); // 부모 클래스가 가장 먼저 메모리에 올라가야하기 때문에 super(size)를 먼저 써야한다. this.color = color; } public void printProperty() { System.out.println(super.getSize() + "인치 " + this.color + "컬러"); } } public class Test43 { public static void main(String[] args) { ColorTV1 myTV = new ColorTV1(32, 1024); myTV.printProperty(); } }
[결과값] 32인치 1024컬러
[계산] public class Test43 { public static void main(String[] args) { int[][] arr = { { 11 }, { 22, 33 }, { 44, 55, 66 } }; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j] + "\t"); } System.out.println(""); } } }
[결과값] 11 22 33 44 55 66
[계산] class A2 { public A2() { } } class B2 extends A2 { public B2() { super(); } } public class Test43 { public static void main(String[] args) { B2 b = new B2(); // 했을시 컴파일러가 넣는 코드를 완성하시오. } }
자바는 다중 상속을 지원하지 않는다.
한 클래스에서 상속할 수 있는 최대 클래스의 수는 한 개이다.
같은 변수명을 사용할 수 있기 때문에 다중 상속을 지원하지 않는다.
통계학적으로 소프트웨어 독립성이 중요하다.
class AAA{...}
class MMM extends AAA {...}
class ZZZ extends MMM {...}
IS-A 관계인지 아리까리하면 HAS-A이다!!
IS-A : ~은 ~이다 관계
HAS-A
[IS-A ex]
사람은 동물이다.
소는 동물이다.
새는 동물이다.
class 동물{}
class 사람 extends 동물{}
class 소 extends 동물{}
class 새 extends 동물{}
-----------------------
[HAS-A ex]
CPU는 컴퓨터이다.(x)
메모리는 컴퓨터이다.(x)
class Computer{
Cpu cpu;
Memory memory;}
[계산] class MobilePhone { protected String number; // 전화번호 public MobilePhone(String number) { this.number = number; } public void answer() { System.out.println("Hi~ from " + this.number); } } class SmartPhone extends MobilePhone { private String androidVer; // 안드로이드 운영체제 네임(버전) public SmartPhone(String number, String ver) { super(number); this.androidVer = ver; } public void playApp() { System.out.println("App is running in " + androidVer); } } public class Test43 { public static void main(String[] args) { SmartPhone phone = new SmartPhone("010-555-777", "Nougat"); phone.answer(); // 전화를 받는다. phone.playApp(); // 앱을 선택하고 실행한다. } }
[결과값] Hi~ from 010-555-777 App is running in Nougat
polymorphism(다형성) + 함수 오버라이딩 = 자바의 70%이다.
polymorphism(다형성) : 부모는 자식
class A{
int a=0;
void printA(){
sysout(a);
}}
class B extends A{
int b;
void printB();
sysout(b);
}}
main{
A a = new A();
a.print(a); // 가능
B b = new B();
b.print A(); // 가능
b.print B(); // 가능
A a = new B(); // 부모 = 자식 | 가능
B b = new A(); // 자식 = 부모 | 오류 발생
[계산] class MobilePhone { protected String number; // 전화번호 public MobilePhone(String number) { this.number = number; } public void answer() { System.out.println("Hi~ from " + this.number); } } class SmartPhone extends MobilePhone { private String androidVer; // 안드로이드 운영체제 네임(버전) public SmartPhone(String number, String ver) { super(number); this.androidVer = ver; } public void playApp() { System.out.println("App is running in " + androidVer); } } public class IsA { public static void main(String[] args) { SmartPhone ph1 = new SmartPhone("010-555-777", "Nougat"); ph1.answer(); // 전화를 받는다. ph1.playApp(); // 앱을 선택하고 실행한다. MobilePhone ph2 = new SmartPhone("010-999-333", "Nougat"); ph2.answer(); // ph2.playApp(); 부모 클래스에서 자식 클래스의 함수를 불러올 수 없다. System.out.println(); } }
[결과값] Hi~ from 010-555-777 App is running in Nougat Hi~ from 010-999-333