Java是一种面向对象的编程语言,在Java中,子类可以继承父类的属性和方法。然而,在子类中如果要使用父类中的参数,需要使用参数传递的方式。
在Java中,参数传递可以通过两种方式实现:传值和传引用。
在传值方式中,参数实际上是值的副本,也就是说,子类中的参数会被复制到父类中,而不是传递引用。这种方式常常用于基本数据类型和字符串等不可变对象。
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类继承了Parent类,但是在test()中调用的setValue()方法实际上是复制了传入的参数,而不是传递了参数的引用。所以,最后打印的结果分别是0和"hello"。
而在传引用方式中,是将参数的引用传递给父类,子类中的修改会影响到父类中的值。这种方式常常用于对象等可变引用类型。
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类继承了Vector类,multiply()方法和move()方法分别使用了传引用方式。所以,在执行p.multiply(2)之后,p对象的x和y值被修改为2和4。在执行p.move(3, 4)之后,p对象的x和y值再次被修改为5和8。