在创建接口引用指向子类对象时,能否访问Object类中的方法?答案是可以的

说先来一段代码引入疑惑:

package com.sunwoda.blogdemo;

public class Test1 {
    public static void main(String[] args) {
        Inter i  = new Demo();//-------------(1)
        i.print();//-------------------------(2)
        i.toString();//----------------------(3)
    }
}
interface Inter {
    void print();
}
class Demo implements Inter{

    public void print() {
        System.out.println("Hello!");
    }   
}

可以看到main中(1),接口引用指向子类对象(编译看左边,运行看右边),(2)中调用print()方法,这两句都是很容易理解的正常语句【接口中声明了print方法,并且子类实现接口时也重写了print方法】,但是(3)中调用toString方法(在顶层的Object类中定义),这个对于新手来说就有点疑惑了。【我的接口中并没有声明toString()方法呀,并且子类实现接口的过程中也没有提到toString()方法,涉及到toString方法的唯一的一个地方就是任何类都要继承Object类,难道接口也继承了Object方法,默认声明了toString方法?】

展开讨论:接口有没有继承Object类?

反驳:这种说法严重错误,我们都知道接口是不能继承类的!(如果能继承类,就意味着接口中可以定义有方法体的方法了,这是不可以的)

结论解释:接口没有继承Object类,但是拿到了Object类中所有方法的映射【接口不拥有Object的这些方法,但是它知道这些方法(相当于照镜子,能看到所有特征,但是不是它的),因此在父类引用指向子类对象动态绑定的时候,它接受Object中所有方法的绑定】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值