class TV{
private int size;
public TV(int size) { this.size = size; }
protected int getSize() { return size; }
}
public static void main(String[] args) {
ColorTV myTV = new ColorTV(32, 1024);
myTV.printProperty();
}
/*
===========
32인치 1024컬러
*/
class TV {
private int size;
public TV(int size) {
this.size = size;
}
protected int getSize() {
return size;
}
}
class ColorTV extends TV {
private int colors;
public ColorTV(int size, int colors) {
super(size);
this.colors = colors;
}
public void printProperty() {
System.out.println(getSize() + "인치 " + colors + "컬러");
}
}
public class Main {
public static void main(String[] args) {
ColorTV myTV = new ColorTV(32, 1024);
myTV.printProperty();
}
}
단일 상속은 한 클래스가 다른 클래스를 하나만 상속받을 수 있는 상속 방식을 말합니다.
Java와 같은 몇몇 언어에서는 단일 상속만을 지원합니다.
클래스 간의 상속 관계가 간단하고 명확하며 복잡성을 낮추는 장점이 있습니다.
다중 상속은 한 클래스가 여러 개의 클래스로부터 상속받을 수 있는 상속 방식을 말합니다.
다중 상속은 여러 개의 부모 클래스로부터 상속받을 때 발생할 수 있는 다양한 문제들로 인해 어려움이 있는 상속 방식입니다.
Java에서는 클래스 간의 다중 상속을 지원하지 않습니다. (인터페이스를 통한 다중 상속 지원)
단일 상속은 클래스 이름과 화살표로 표현됩니다. 화살표는 부모 클래스 쪽으로 향하고, 화살표 끝에 비어 있는 삼각형이 있습니다.
다중 상속은 클래스 이름과 여러 화살표로 표현됩니다. 부모 클래스 쪽으로 향하는 화살표가 여러 개 있습니다.
public static void main(String[] args) {
IPTV iptv = new IPTV("192.1.1.2", 32, 2048); //"192.1.1.2" 주소에 32인치, 2048컬러
iptv.printProperty();
}
=============================================
class IPTV extends ColorTV {
private String ipAddress;
public IPTV(String ipAddress, int size, int colors) {
super(size, colors);
this.ipAddress = ipAddress;
}
@Override
public void printProperty() {
System.out.println("나의 IPTV는 " + ipAddress + " 주소의 " + getSize() + "인치 " + getColors() + "컬러");
}
}
public class Main {
public static void main(String[] args) {
IPTV iptv = new IPTV("192.1.1.2", 32, 2048);
iptv.printProperty();
}
}
나의 IPTV는 192.1.1.2 주소의 32인치 2048컬러
class Man {
String name;
public Man(String name) {
this.name = name;
}
public void tellYourName() {
System.out.println("My name is " + name);
}
}
class BusinessMan extends Man {
String company;
String position;
public BusinessMan(String name, String company, String position) {
this.name = name;
this.company = company;
this.position = position;
}
public void tellYourInfo() {
System.out.println("My company is " + company);
System.out.println("My position is " + position);
tellYourName();
}
}
코드에서 BusinessMan 클래스의 생성자에서 this.name = name;와 같은 코드를 통해 직접적으로 부모 클래스인 Man 클래스의 필드인 name에 접근하고 값을 할당하려고 시도하고 있습니다. 이는 부모 클래스의 name 필드가 private으로 선언되어 있어 직접 접근할 수 없기 때문에 에러가 발생합니다.
상속 관계에서 부모 클래스의 private 멤버는 자식 클래스에서 직접 접근할 수 없습니다. 대신에 부모 클래스에서 제공하는 생성자나 메소드를 통해 간접적으로 접근하거나 값을 설정할 수 있습니다.
올바른 방법은 super 키워드를 사용하여 부모 클래스의 생성자를 호출하여 초기화하는 것입니다.
super(name);를 통해 부모 클래스의 생성자를 호출하여 name 필드를 초기화하고, tellYourName() 메소드를 통해 부모 클래스의 메소드를 호출할 수 있습니다.
import java.util.Random;
public class Main {
public static void main(String[] args) {
int[][] array = new int[4][3];
Random random = new Random();
// 2차원 배열에 랜덤 값 채우기
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
array[i][j] = random.nextInt(100); // 예시로 0부터 99까지의 랜덤 값
}
}
// 2차원 배열 출력
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println();
}
}
}