Java是一種面向?qū)ο蟮木幊陶Z(yǔ)言,在Java中,子類(lèi)可以繼承父類(lèi)的屬性和方法。然而,在子類(lèi)中如果要使用父類(lèi)中的參數(shù),需要使用參數(shù)傳遞的方式。
在Java中,參數(shù)傳遞可以通過(guò)兩種方式實(shí)現(xiàn):傳值和傳引用。
在傳值方式中,參數(shù)實(shí)際上是值的副本,也就是說(shuō),子類(lèi)中的參數(shù)會(huì)被復(fù)制到父類(lèi)中,而不是傳遞引用。這種方式常常用于基本數(shù)據(jù)類(lèi)型和字符串等不可變對(duì)象。
public class Parent { int n = 0; String s = "hello"; public void setValue(int n, String s) { this.n = n; this.s = s; } } public class Child extends Parent { public void test() { setValue(1, "world"); System.out.println(n); // 0 System.out.println(s); // "hello" } }
在上述例子中,Child類(lèi)繼承了Parent類(lèi),但是在test()中調(diào)用的setValue()方法實(shí)際上是復(fù)制了傳入的參數(shù),而不是傳遞了參數(shù)的引用。所以,最后打印的結(jié)果分別是0和"hello"。
而在傳引用方式中,是將參數(shù)的引用傳遞給父類(lèi),子類(lèi)中的修改會(huì)影響到父類(lèi)中的值。這種方式常常用于對(duì)象等可變引用類(lèi)型。
public class Vector { int x, y; public Vector(int x, int y) { this.x = x; this.y = y; } public void multiply(int n) { x *= n; y *= n; } } public class Point extends Vector { public Point(int x, int y) { super(x, y); } public void move(int dx, int dy) { x += dx; y += dy; } } public class Main { public static void main(String[] args) { Point p = new Point(1, 2); p.multiply(2); System.out.println(p.x + ", " + p.y); // "2, 4" p.move(3, 4); System.out.println(p.x + ", " + p.y); // "5, 8" } }
在上述例子中,Point類(lèi)繼承了Vector類(lèi),multiply()方法和move()方法分別使用了傳引用方式。所以,在執(zhí)行p.multiply(2)之后,p對(duì)象的x和y值被修改為2和4。在執(zhí)行p.move(3, 4)之后,p對(duì)象的x和y值再次被修改為5和8。