public class NoPublicMain
{
static void main(String[] args)
{
System.out.println("I am not public ");
}
}
1.如果我们的main方法不是public ,编译可以正常通过,但是在执行时,就会这样
2.基类和导出类
public class Base
{
public Base()
{
System.out.println("I am Base");
}
}
这是父类
public class Sub extends Base
{
public Sub()
{
System.out.println("I am Sub");
}
public static void main(String[] args)
{
new Sub();
}
}
这是子类
这是结果
如果父类是这样的。
public class Base
{
private String name=null;
public Base(String name)
{
this.name=name;
System.out.println("I am Base"+this.name);
}
}
那会怎样,重新编译,结果编译不过,报错啦
找不到,Base() 为什么会报这个错,因为这时子类用的默认构造方法,在默认构造方法里有个个默认super();这是父类里已经没有这个默认构造方法了,shit出现。也就是说,如果基类没有空参构造函数的话,你就得显示的初始化基类了,按照基类的构造函数。
好我们把子类改成这样
public class Sub extends Base
{
public Sub()
{
super("Father is here");
System.out.println("I am Sub");
}
public static void main(String[] args)
{
new Sub();
}
}
编译没有报错,然后咱运行下看看。
完美运行,所以调用子类的构造方法时,看看能不能调用的父类的构造方法,否则的话你就得显式的调用父类的构造方法,super(what ever it is );
如果父类是这样
public class Base
{
int i=3;
public Base(String name)
{
System.out.println("I am Base"+name);
}
}
public class Sub extends Base
{
int i=5;
public Sub(String name)
{
super(name);
System.out.println("I am Sub and i="+i);
System.out.println("I am Sub and i="+super.i);
}
public static void main(String[] args)
{
new Sub("Hello World");
}
}
如果子类是这样,父类是这样。
public class Sub extends Base
{
int i=5;
public Sub(String name)
{
super(name);
System.out.println("I am Sub and i="+i);
System.out.println("I am Sub and i="+super.i);
}
public static void main(String[] args)
{
Base s=new Sub("Hello World");
System.out.println(s.i);
}
}
public class Base
{
int i=3;
public Base(String name)
{
System.out.println("I am Base"+name);
}
}
那结果是这样
刚开始的感觉这块有点绕啊 绕啊绕啊的就迷糊了
又做了次实验
父类是这样的
public class Base
{
public Base()
{
System.out.println("I am Base");
}
}
子类是这样的
public class Sub extends Base
{
public Sub()
{
System.out.println("I am Sub");
super();
}
}
而结果是这样的
引用原文 从外部来看,它就像是一个与基类具有相同接口的新类,或许还有一些额外的方法和域。当创建一个该类时,该类包含一个基类的子对象,这个子对象,与你用积累直接创建的对象是一样的,二者的区别在于,后者来自于外部,而基类的子对象,被包装在导出类对象内部。基类优先与子类初始化。
另外 一定要确保,基类被正确初始化了。包括成员变量,别到时候用到了,没初始化,报错了,还不知道哪里的问题,
另外这个代理看的不是很明白,就是裹上一层?另外可以对访问加点限制。