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

来源:互联网 发布:淘宝几百块的电脑主机 编辑:程序博客网 时间:2024/06/06 13:56
例子:最终的输出结果是什么?
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()方法是可以被子类继承的,那么就应该是调用子类的方法。
     父类只可以调用自己的方法,对于子类的方法,父类是不可见的。而子类可以继承父类中的方法。在上转型(将子类转换为父类)的时候,只能调用的是父类中的方法。
0 0
原创粉丝点击