以下程序中this实际上代表子类对象是吧?为什么调用print时还是调用了父类呢?请给出有力的说明谢谢了
class Base
{
private void print()
{
System.out.println("父类方法被调用");
}
public void show()
{
this.print();
System.out.println(this.getClass().getName());
}
}
class Sub extends Base
{
void print()
{
System.out.println("子类方法被调用");
}
}
public class InheritanceDemo
{
public static void main(String[] args)
{
Sub s =new Sub();
s.show();
}
}
class Base
{
private void print()
{
System.out.println("父类方法被调用");
}
public void show()
{
this.print();
System.out.println(this.getClass().getName());
}
}
class Sub extends Base
{
void print()
{
System.out.println("子类方法被调用");
}
}
public class InheritanceDemo
{
public static void main(String[] args)
{
Sub s =new Sub();
s.show();
}
}
比如在一个方法中,调用其他对象的变量或方法时,可以使用那个对象的对象名,比如aa.abc();
而调用自己所在对象的方法或变量时,不知道别人给起了什么名,所以直接用this.abc()就可以了
你所表达的就是这个this 在子类继承的时候代表的是谁 , 你可以把父类的方法名改一下试试,
你说的是方法的重写 他会打印调用子类方法 那只是方法被子类重写了而已
你把private 关键字去掉后,输出的是 子类的方法被调用,加上private关键字后,父类的方法不能被子类所继承,this关键字调用的是父类的方法,但是没有修饰符private,调用的是子类的方法,这个时候子类可以继承父类的方法,子类重写了父类的方法;this是对当前子类对象的调用。
所以 你用this关键字调用继承父类的私有 属性 或方法 点不出来 而并不代表子类没有继承父类的私有的东西
A subclass does not inherit the private members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass.http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html在百度Java吧看到的,7楼
http://tieba.baidu.com/p/1749428259
看到你的回帖,怎么都琢磨不明白了疯了
如果该类都不继承私有方法那么内存中存放方法的代码段都没有这个父类方法,怎么调用呢。
我刚写的 关于父类私有方法如何调用
LZ 可以把私有该成保护或者公有,执行一下就知道了。
走到父类时调用show方法时先调用私有的print方法 因为是父类自己可以调自己的方法 而你输出类的时候this指的是你当前创建实例的这个类 就是sub类
我也迷糊了 this不是调用此方法的对象吗
明明是sub类型执行的show方法 为什么指向了base父类?按照你的解释 this应该永远指向base类
可是在LZ的例子里 如果把base类里面print方法的private去掉 执行的就是sub类的print方法
这怎么解释?
{
System.out.println("子类方法被调用");
}是定义了一个新方法 并不是重写Base中的 print方法 Sub s =new Sub();
s.show(); 调用了show方法 show方法调用了Base中的print
+10086顺便贴一下,调用子类print的代码class Base { protected void print() {
System.out.println("父类方法被调用");
} public void show() {
this.print();
System.out.println(this.getClass().getName());
}
}class Sub extends Base {
protected void print() {
System.out.println("子类方法被调用");
}
}public class InheritanceDemo {
public static void main(String[] args) {
Sub s = new Sub();
s.show(); }
}