欢迎访问宙启技术站
智能推送

Java中的默认函数和静态函数:用法和区别

发布时间:2023-06-23 21:43:02

Java中的函数分为默认函数和静态函数。默认函数是指在类中定义的函数,而静态函数是指用关键字static来定义的函数。它们有着不同的用法和区别,下面我们来具体了解一下。

1.用法的区别

默认函数:在Java中,我们定义一个类时,可以在类中定义函数。这种函数就称为默认函数。默认函数可以通过实例化对象来调用。它可以访问实例变量和实例方法,并且可以被覆盖(即不同的子类可以根据自己的需求去实现它)。

静态函数:静态函数是用关键字static来定义的函数,它可以直接使用类名调用,比如ClassName.methodName()。静态函数在类加载时被加载到内存中,并且只会被加载一次。因为它不依赖于对象,所以它可以访问其他静态变量和静态方法,但无法访问实例变量和实例方法。

2.区别

(1)默认函数和静态函数的调用方式不同。

默认函数需要使用对象来调用,而静态函数可以直接使用类名来调用。

(2)默认函数可以访问实例变量和实例方法,而静态函数只能访问静态变量和静态方法。

默认函数中可以使用this关键字来引用当前对象的实例变量和实例方法,而静态函数中无法引用非静态变量和方法。

(3)默认函数可以被覆盖,而静态函数不能被覆盖。

在子类中定义一个与父类中相同的函数名的默认函数时,便会覆盖父类的函数;而在子类中定义一个与父类中相同的函数名的静态函数时,将不会覆盖父类中的函数,而是会在子类中新增一个同名的静态函数。

例如:

class SuperClass {

    public void print() {

        System.out.println("SuperClass");

    }

    public static void staticPrint() {

        System.out.println("SuperClass Static");

    }

}

class SubClass extends SuperClass {

    @Override

    public void print() {

        System.out.println("SubClass");

    }

    public static void staticPrint() {

        System.out.println("SubClass Static");

    }

}

在上面的例子中,SubClass覆盖了SuperClass中的print方法,但并没有覆盖其staticPrint方法,而是新增了一个同名的静态方法。

(4)默认函数可以被重载,而静态函数也可以被重载。

函数重载是指同一个类中定义了多个相同函数名的函数,它们的参数列表不同。函数重载不仅可以在默认函数中实现,也可以在静态函数中实现。

例如:

class TestOverload {

    public void test(int a) {

        System.out.println("int a:" + a);

    }

    public String test(String str) {

        return "Test String";

    }

    public static void test() {

        System.out.println("No overload");

    }

    public static void test(String str) {

        System.out.println("Static overload:" + str);

    }

}

在上面的例子中,test函数在默认函数和静态函数中都有重载。默认函数中重载了test函数,接受一个int类型的参数和一个String类型的参数,返回一个String类型的值;静态函数中重载了test函数,一个没有参数的函数和一个接受一个String类型的参数的函数。