关于this,继承,修饰的问题

本文通过一个Java继承的例子,探讨了父类与子类方法调用的机制。具体分析了当子类实例调用父类方法时,如何确定调用哪个版本的方法,尤其是在涉及private与非private方法的情况下。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例子:最终的输出结果是什么?
class Person{
    private void print(){
        System.out.println("Person");
    }
    
    public void fun(){
        this.print();
    }
};

class Student extends Person{
    public void print(){
        System.out.println("Student");
    }
};

public class ExtDemo04{
    public static void main(String args[]){
        Student s = new Student();
        s.fun();
    }
};
         输出结果是Person,原因是当s调用fun()方法(从父类Person中继承而来)时,这时候的this是指的当前对象Student的一个实例s,而fun()方法中却又调用的是print()方法,到底是调用的父类的print()还是子类Student中的print()方法呢?父类Person中的print()方法是private修饰的,所以子类Student是继承不到此方法,子类与父类中的print()方法是两个独立的方法,彼此之间没有关系。
       那为什么调用的是父类的print()方法呢?因为Student的实例在调用父类的方法时候,父类首先要看的是子类中有没有重写了此方法,而这个例子中是没有重写的,所以调用的是父类的print()方法。若将private去掉改为default修饰print()方法,那么父类中的print()方法是可以被子类继承的,那么就应该是调用子类的方法。
     父类只可以调用自己的方法,对于子类的方法,父类是不可见的。而子类可以继承父类中的方法。在上转型(将子类转换为父类)的时候,只能调用的是父类中的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值