昨天在看Java中的面向对象与内存解析时,有稍许的不理解,故晚上回去又仔细的揣摩了一下。
就以这个方法调用为例:
public class TestMethod {
public static void main(String[] args) {
m4 (4,6);
int i = m4 (4,6);
System.out.println (i);
}
public static int m4(int i,int j) {
return i > j ? i : j;
}
}
两种方法定义
第一种:将4传给i,6传给j,这样调用,值返回存放在一个临时区域,因为没用返回值,所以返回的值就消失了。
第二种:方法执行完了,将执行的结果返回给所定义的i。用了返回值,方法返回什么值,就返回什么类型。
以上仅属于个人的理解,有什么错无还望大家指出。
另外学习到的一点就是:
重写(覆盖)父类的方法
重写只能存在于子类和父类之间
l 重写的原则:(两同两小一大 他人总结)
两同:方法名相同、参数列表相同
两小:子类方法返回值类型比父类返回值类型更小或相等。
子类方法声明抛出的异常类应比父类方法抛出的异常类更小或相等。
一大:子类方法的访问权限应比父类方法的访问权限更大或相等。
l 子类覆盖方法不能比父类覆盖方法抛出更多的异常
l 覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法。
ErrorEG:
class Fruit{
public static void test(){
}
}
class Apple extends Fruit{
public void test(){
}
}
子类不能继承父类的静态方法
l 父类方法如果具有private访问权限,则这个方法对其子类就隐藏隐藏,子类也无法覆盖父类的方法,如果子类中 定义了一个与父类private修饰的方法具有相同的方法名、相同的形参列表、相同的返回值类型的方法,则这不是重写,而是在子类中重新定义了一个新的方法。下面有一个简例说明:
RightEG:
class Vehicle{
//test方法是private的,子类是不能覆盖该方法
private void drive(){
}
}
class Car extends Vehicle{
//此处不是方法的重写,所以可以增加static关键字
public static void drive (){
}
}
以上就先写到这里