Урок 7

Перегрузка


1. Перегрузка методов

В Java разрешается в одном и том же классе определять два или более метода с одним именем, если только объявления их параметров отличаются. Это называется перегрузкой методов.

Перегрузка методов является одним из способов поддержки полиморфизма в Java. При вызове перегружаемого метода для определения нужного его варианта в Java используется тип и/или количество аргументов метода.

Возвращаемые типы перегружаемых методов могут отличаться, но самого возвращаемого типа недостаточно для того, чтобы отличать два разных варианта метода.

Пример 1. Перегрузка методов

public class Overload1 {
    void test() {
        System.out.println("No parameters");
    }
    //illegal overloading method
   /* int test() {
        System.out.println("No parameters");
        return 1;
    }*/

    void test(int a) {
        System.out.println("a: " + a);
    }

    void test(int a, int b) {
        System.out.println("a and b: " + a + " " + b);
    }

    double test(double a) {
        System.out.println("double a: " + a);
        return a * a;
    }
}
public class OverloadDemo1 {
    public static void main(String[] args) {
        Overload1 ob = new Overload1();
        double result;

        ob.test();
        ob.test(10);
        ob.test(10, 20);
        result = ob.test(123.25);
        System.out.println("Result of ob.test(123.25): " + result);
    }
}

Пример 2. Применение автоматического преобразование типов к перегрузке

public class Overload2 {
    void test() {
        System.out.println("No parameters");
    }

    void test(int a, int b) {
        System.out.println("a and b: " + a + " " + b);
    }

    double test(double a) {
        System.out.println("double a: " + a);
        return a * a;
    }
}
public class OverloadDemo2 {
    public static void main(String[] args) {
        Overload2 ob = new Overload2();
        double result;
        int i = 88;

        ob.test();
        ob.test(i);
        ob.test(10, 20);
        result = ob.test(123.25);
        System.out.println("Result of ob.test(123.25): " + result);
    }
}

2. Перегрузка конструкторов

public class Box6 {
    double width;
    double height;
    double depth;

    Box6(double w, double h, double d) {
        width = w;
        height = h;
        depth = d;
    }

    public Box6() {
        width = -1;  // используем -1 для
        height = -1; // обозначения непроинициализированной
        depth = -1;  // коробки
    }

    Box6(double len) {
        width = len;
        height = len;
        depth = len;
    }

    // подсчитать объем коробки
    double getVolume() {
        return width * height * depth;
    }
}
public class OverloadCons {
    public static void main(String[] args) {
        Box6 myBox1 = new Box6(10, 20, 15);
        Box6 myBox2 = new Box6();
        Box6 myCube = new Box6(7);

        double vol;

        vol = myBox1.getVolume();
        System.out.println("Объем myBox1: " + vol);

        vol = myBox2.getVolume();
        System.out.println("Объем myBox2: " + vol);

        vol = myCube.getVolume();
        System.out.println("Объем myCube: " + vol);
    }
}


0 comments
Leave your comment: