子类与父类static方法调用顺序
来源:技术人生 责任编辑:栏目编辑 发表时间:2013-07-02 04:56 点击:次
Java代码
第一次测试:
父类:
public class Parent {
protected static void staticmethod(){
System.out.println("parent");
}
protected void say(){
System.out.println("this is parent");
}
}
Java代码
子类:
public class Son extends Parent {
@Override
protected void say() {
// TODO Auto-generated method stub
System.out.println("this is son");
}
protected static void staticmethod(){
System.out.println("son");
}
}
调用:
Java代码
Parent son1 = new Son();
son1.staticmethod();
son1.say();
Son son2 = new Son();
son2.staticmethod();
son2.say();
Parent p1 = new Parent();
p1.staticmethod();
p1.say();
输出结果:
Java代码
parent
this is son
son
this is son
parent
this is parent
即为: 父类的 static 方法 子类不能覆盖,但是子类能与父类有相同说明的static方法,
如上:protected static void staticmethod(),
但是
Java代码
son1.staticmethod()
输出
parent
同时
Java代码
son2.staticmethod();
输出
son
第二次测试:
修改子类:
Java代码
public class Son extends Parent {
@Override
protected void say() {
// TODO Auto-generated method stub
System.out.println("this is son");
}
protected static void staticmethod(){
System.out.println("son");
}
private Son() {
// TODO Auto-generated constructor stub
}
private static Son son ;
public static Son getInstance(){
if (son == null){
son = new Son();
}
return son;
}
}
然后调用:
Java代码
Parent son1 = Son.getInstance();
son1.staticmethod();
 
第一次测试:
父类:
public class Parent {
protected static void staticmethod(){
System.out.println("parent");
}
protected void say(){
System.out.println("this is parent");
}
}
Java代码
子类:
public class Son extends Parent {
@Override
protected void say() {
// TODO Auto-generated method stub
System.out.println("this is son");
}
protected static void staticmethod(){
System.out.println("son");
}
}
调用:
Java代码
Parent son1 = new Son();
son1.staticmethod();
son1.say();
Son son2 = new Son();
son2.staticmethod();
son2.say();
Parent p1 = new Parent();
p1.staticmethod();
p1.say();
输出结果:
Java代码
parent
this is son
son
this is son
parent
this is parent
即为: 父类的 static 方法 子类不能覆盖,但是子类能与父类有相同说明的static方法,
如上:protected static void staticmethod(),
但是
Java代码
son1.staticmethod()
输出
parent
同时
Java代码
son2.staticmethod();
输出
son
第二次测试:
修改子类:
Java代码
public class Son extends Parent {
@Override
protected void say() {
// TODO Auto-generated method stub
System.out.println("this is son");
}
protected static void staticmethod(){
System.out.println("son");
}
private Son() {
// TODO Auto-generated constructor stub
}
private static Son son ;
public static Son getInstance(){
if (son == null){
son = new Son();
}
return son;
}
}
然后调用:
Java代码
Parent son1 = Son.getInstance();
son1.staticmethod();
 
相关新闻>>
- 发表评论
-
- 最新评论 更多>>