thinking in java test 2.11练习(7)以及修饰符能区分同名方法吗?

题目:将Incrementable的代码段改写成一个完整的可运行程序。

代码段在P29到P30
class StaticTest {
static int i = 47;
}
class Incrementable {
static void increment() {
StaticTest.i++
}
}

public class test42 {
    public static void main(String[] args) {
        Incrementable.increment();
        System.out.println(StaticTest.i);
    }
}

class Incrementable {
    static void increment() {
        StaticTest.i++;
    }
}

class StaticTest {
    static int i = 47;
}

控制台输出48,说明i的值确实被改变了。
在这里,由于方法increment()是静态方法,所以调用它时不需要创建Incrementable的实例化对象,直接用“.”调用即可。
除此之外,笔者做了一些试验性的尝试,比如:
increment()方法已经被声明为静态了,可以写同名方法吗?尝试结果发现,只要参数列表不同,就可以任意创建,不受static的影响。修改后代码如下:

public class test42 {
    public static void main(String[] args) {
        Incrementable.increment();
        Incrementable incrementable = new Incrementable();
        incrementable.increment(2);
        System.out.println(StaticTest.i);
    }
}

class Incrementable {
    static void increment() {
    StaticTest.i++;
}

    void increment(int a) {
        StaticTest.i--;
    }
}

class StaticTest {
    static int i = 47;
}

控制台输出是47.
所以我们可以间接确认前一节的内容,区分同名方法靠的是参数列表,与是否用static,public,private等无关,又例如:

    public void increment(int a) {
        StaticTest.i--;
    }

    private void increment(int a) {

    }

此时编译器提示错误:increment(int a) has already defind.

在Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类型,参数的名字以及所抛出来的异常。

以上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值