Java中的默认函数和静态函数:用法和区别
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类型的参数的函数。
