发布网友 发布时间:2022-04-24 05:43
共5个回答
热心网友 时间:2022-04-22 23:01
s是对Student对象实例的引用,运行代码s.fun();因为Student类中没有fun()这个方法。于是,程序去他的父类寻找。找到后,首先输出“什么玩意”,然后运行this.print();注意java中的关键字this在编译的时候就确定了,它就代表定义时候的对象。(这点和javascript有很大不同)。因此,此时的this代表Person,接着运行Person中的print()方法,输出结果就是“这是父类的方法”。但是,为什么去掉private关键字结果又不一样了呢?因为被private修饰的方法和属性是不会被子类继承的,如果是默认的权限,子类也可以继承到。于是,在父类运行this.print()时(即没有关键字private修饰),它会去子类查找该方法是否被重写,如果是,则调用子类方法;否则,执行父类的方法。
热心网友 时间:2022-04-23 00:19
student类继承了person类,其中person类中的print方法其修饰符权限是private,是私有的,所以子类student是不能继承的,即使student中也定义了print方法,这构成不了重写,它只是子类独有的方法,至于fun方法因为子类中没有重写,所以,就完全的继承了父类的fun方法,因此,当你用student对象调用fun方法时,进入父类的fun方法,这时你又用this关键字调用了print方法,此时,这个this就可以理解为父类的对象,(this代表当前对象),当你将父类的访问修饰符去掉时,这样,子类和父类中的print方法就构成了重写,所以就会得到你想要的结果
什么玩意
这是子类的方法
注意,当父类中的变量或是方法用private修饰时,则子类不能继承这个变量和方法,也不能重写这个方法。
热心网友 时间:2022-04-23 01:54
我给你举个例子说,这代表的类对象
类MyFirstClass {
公共无效木屐(INT A,INT B)
{
的System.out调用println(A + B)
}
公共无效B()
{
this.getA(2,2); }
}
注意看B法,这里只有这个类的对象,然后对象。木屐这个方法
希望你能满意我的回答,这个例子很简单
热心网友 时间:2022-04-23 03:45
这个this 调用了你的person类 里面的 print() 方法
也就是说 你这个person类 一共有两个方法 其中 fun()类 运行完了 他的System.out.println();
显示了“什么玩意”后 开始运行他的下一句 this.print();
你有没有发现 print() 正好是fun()上面的那个方法 于是 他就把print()方法运行了 运行print()方法后 他就运行了 System.out.println("这是父类的方法 ");
于是 他的运行结果就是:
什么玩意
这是父类的方法追问我明白你的意思 不过我在子类中不应该也继承了fun()方法么 就是说student里也有个fun()方法 那么子类中的this.print()不是调用的子类中的print么 就是“这是子类中的方法”还是说。。。自己有点糊涂了
追答那是因为 你main方法里 Student s = new Student s.fun 你New了Student 后 用了s.fun
你调用的是fun();方法 所以 他运行的就是fun();方法 如果你想运行别的的话 你应该是 s.print();
热心网友 时间:2022-04-23 05:53
java有个特点:多态性。这是设计者设定的规则,你不能根据平时指针的概念去理解它。
this在这里是没有用的,只要子类有重写的方法,哪怕你直接定义person p = new person(),调用p.fun()时也还是调用子类的方法,fun()还是会调用子类的print的方法。