class A {
public static void a() {
System.out.println("super!");
}
}
class TestStatic extends A {
public static void a() {
System.out.println("child!");
}
public static void main( String[] args) {
A obj = new TestStatic();
System.out.println(obj);
obj.a();
}
}
问:obj是属于子类对象还是父类对象,为什么?在obj.a();中a方法究竟是调用的哪个方法?public static void a() {
System.out.println("child!");
}
方法前面加static和不加static有什么区别? 为什么我见过的方法前面都有void,是必须的么??结果究竟是输出哪个?
public static void a() {
System.out.println("super!");
}
}
class TestStatic extends A {
public static void a() {
System.out.println("child!");
}
public static void main( String[] args) {
A obj = new TestStatic();
System.out.println(obj);
obj.a();
}
}
问:obj是属于子类对象还是父类对象,为什么?在obj.a();中a方法究竟是调用的哪个方法?public static void a() {
System.out.println("child!");
}
方法前面加static和不加static有什么区别? 为什么我见过的方法前面都有void,是必须的么??结果究竟是输出哪个?
这是main的写法,如果你不加static、void 是不能直接运行的对于其他方法当然可以不写
如果不写 void 要写你确实的返回值
public void a() {
System.out.println("super!");
}
}class TestStatic extends A {
public void a() {
System.out.println("child!");
} public static void main(String[] args) {
A obj = new TestStatic();
System.out.println(obj);
obj.a();
}
}对比一下这段程序你就知道 static的用处了
1、用子类构造的对象,用父类的类型去引用它
父类的类型看不到子类的静态方法. 也就是说父类的静态方法,子类是覆盖不了的
2、如果把两个static都去掉,
结果成了welcome.TestStatic@757aef
child! 重载覆盖了父类的方法。如果只去掉一个,则违背了java不允许返回类型不同的重载
3、静态方法不能重载,也就是此方法覆盖不了父类中与它同名字的静态方法,非静态的方法可以重载,可以覆盖掉父类中的非静态方法