超类
package net.eicp.sfgiuggese;
public class Manager
{
protected String ddd="dd";
}
子类(和超类不同包)
import net.eicp.sfgiuggese.*;
class VisitTest extends Manager
{
public VisitTest()
{}
public static void main(String[] args)
{
VisitTest vt=new VisitTest();
System.out.println(vt.ddd);//通过,是正常的
vt.getDDD();
}
public void getDDD()
{
System.out.println(super.ddd);
//也通过,这下问题就来了
}
}
子类的方法只能够访问子类对象的私有字段System.out.println(vt.ddd);
而不能访问超类对象的这个字段,那为什么我这样调用super.ddd也能能过?
package net.eicp.sfgiuggese;
public class Manager
{
protected String ddd="dd";
}
子类(和超类不同包)
import net.eicp.sfgiuggese.*;
class VisitTest extends Manager
{
public VisitTest()
{}
public static void main(String[] args)
{
VisitTest vt=new VisitTest();
System.out.println(vt.ddd);//通过,是正常的
vt.getDDD();
}
public void getDDD()
{
System.out.println(super.ddd);
//也通过,这下问题就来了
}
}
子类的方法只能够访问子类对象的私有字段System.out.println(vt.ddd);
而不能访问超类对象的这个字段,那为什么我这样调用super.ddd也能能过?
但是,不能访问超类的protected,而现在我都通过super来访问超类的protected了所以不解
但在子类中创建一个父类的对象是不能调用protected的字段和方法的如上例
VisitTest vt=new VisitTest();
System.out.println(vt.ddd);//通过,是正常的
Manager m=new Manager()
System.out.println(m.ddd)//是不能通过的,我的意思就是这样记然不能通过父类的对象访问protected,那为什么还可以用super.ddd来访问
protected只能通过继承得到超类的protected,所以只能访问子类protected
但是,不能访问超类的protected都说了在子类中不能用超类来访问protected,只能在子类中用子类对象访问
那为什么在子类中还能用super.XX来访问,这不是自打嘴巴吗???
谁可以解释一下,分不够我开贴
super所指向的那个超类对象是子类对象本身的一部分,它和用“new 超类()”这种形式创建的超类对象是两回事!
搞清楚啊!用super.XX来访问就代表是从超类中访问么?这仍然还是从子类中访问啊!
super所指向的那个超类对象是子类对象本身的一部分,它和用“new 超类()”这种形式创建的超类对象是两回事!