淘先锋技术网

首页 1 2 3 4 5 6 7

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。