- 오버로딩(Overloading)
사전적으로 '과적하다.'라는 뜻이다. C언어에서는 함수명이 고유하게 존재해야 한다. 즉 하나의 함수가 하나의 기능만을 구현해야 한다는 것이다. 하지만 자바에서는 하나의 메소드 이름으로 여러 기능을 구현하기 때문에 '과적하다.'라는 뜻의 이름을 붙여준 것으로 보인다.- 오버로딩의 정의는 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다.
- 메소드의 이름이 같고, 매개변수의 개수나 타입이 달라야 한다. 주의할 점은 '리턴 값만' 다른 것은 오버로딩을 할 수 없다는 것이다.
- 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것을 오버라이딩이라고 한다. 상속받은 메소드를 그대로 사용할 수도 있지만, 자식 클래스에서 상황에 맞게 변경해야하는 경우 오버라이딩할 필요가 생긴다.
- 오버라이딩은 부모 클래스의 메소드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩하고자 하는 메소드의 이름, 매개변수, 리턴 값이 모두 같아야 한다.
결과
나는 포도이다.
나는 사과이다.
나는 배이다.
public static void main(String[] args) {
Fruit[] fruit = {new Grape("포도"), new Apple("사과"), new Ship("배")};
Fruit.getFruit(fruit);
}
public class Fruit {
public String getName() {
return null;
}
public static void getFruit(Fruit[] fruit) {
String str=null;
for (int i = 0; i < fruit.length; i++) {
str=fruit[i].getName();
System.out.println("나는 " + str+"입니다.");
}
}
}
public class Apple extends Fruit {
private String name;
public Apple(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
}
public class Grape extends Fruit {
private String name;
public Grape(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
}
public class Ship extends Fruit {
private String name;
public Ship(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
}
//declaration
Shape[] shapeArr = { new Circle(2),
new Rectangle(2, 2), new Triangle(2, 2) };
//logic
double sum = 0;
for (Shape shape : shapeArr) {
sum += shape.getArea();
}
System.out.println(sum);
double sum1 = 0;
for (int i = 0; i < shapeArr.length; i++) {
sum1 += shapeArr[i].getArea();
}
System.out.println(sum1);
System.out.println(Shape.shapeAllArea(shapeArr));
//총 면적은:614.1592653589794
public class Circle extends Shape {
private double radius;
private double area;
public Circle(double r) {
this.radius = r;
}
@Override
public double getArea() {
area = Math.pow(radius, 2) * Math.PI;
return area;
}
}
public class Rectangle extends Shape {
private double base;
private double height;
private double area;
public Rectangle(double base, double height) {
this.base = base;
this.height = height;
}
@Override
public double getArea() {
area = base * height;
return area;
}
}
public class Triangle extends Shape {
private double base;
private double height;
private double area;
public Triangle(double base, double height) {
this.base = base;
this.height = height;
}
@Override
public double getArea() {
area = (base * height) / 2;
return area;
}
}
4 x 4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를
랜덤하게 생성하여 정수 16개를 배열에 저장하고, 2차원 배열을 화면에 출력하라.8 6 1 1 7 3 6 9 4 5 3 7 9 6 3 1
import java.util.Random;
public class RandomARR {
public static void main(String[] args) {
// 4 x 4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를
// 랜덤하게 생성하여 정수 16개를 배열에 저장하고, 2차원 배열을 화면에 출력하라.
int[][] arr = new int[4][4];
Random random = new Random();
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = random.nextInt(11);
System.out.print(arr[i][j]+ " ");
}System.out.println();
}
}
}