类中的方法可以分为两类,方法声明时,方法类型前面不加关键字static修饰的是实例方法,加static修饰的是类方法。
·调用方式
(1)对象调用
(2)类名调用
注意:
(1)类方法不能直接访问所属类的非静态变量和方法
(2)子类不能重写父类的静态方法,但可以通过定义与父类相同的方法,从而隐藏父类中的静态方法。(但不是覆盖)
(3)子类不能把父类中的非静态方法重写为静态方法
具体的请参考以下代码:
public class A {
public static void p(){
System.out.println("基类");
}
}
public class B extends A {
public static void p(){
System.out.println("子类");
}
}
public class C {
public static void main(String[] args){
A a = new B(); //多态的体现
a.p();
}
}
实例化这个对象的时候,a是存在于栈中的,是A类的,而对象申请的空间是在堆里,且是B类的,此时a指针指向B类的空间。当执行a.p();时,如果是非静态类方法,就会调用子类的p()方法,因为子类此时是重写了父类的方法。但是如果是静态方法,就会去调用父类的方法,实际上这个时候就是直接A类去调用p()这个方法。所以这段代码的运行结果是
基类
如果是非静态方法,运行结果就是
子类