Java参数传递父子类

Java是一种面向对象的编程语言,支持继承和多态。在Java中,参数的传递方式有两种:值传递和引用传递。本文将介绍Java中参数传递的概念,并探讨在父子类之间传递参数的情况。

参数传递方式

在Java中,方法的参数传递方式有值传递和引用传递两种。当传递基本数据类型参数时,实际上是将参数的值拷贝一份传递给方法。而当传递引用类型参数时,实际上是将参数的地址(引用)拷贝一份传递给方法。

值传递

值传递是指将参数的值拷贝一份传递给方法。在方法内部对参数进行修改不会影响原始的参数值。下面是一个简单的示例代码:

public class Main {
    public static void main(String[] args) {
        int num = 10;
        changeValue(num);
        System.out.println(num);  // 输出:10
    }

    public static void changeValue(int value) {
        value = 20;
    }
}

在上述代码中,changeValue方法接收一个int类型的参数value。在方法内部,将value的值修改为20,但是在main方法中输出num的值时,仍然是10。

引用传递

引用传递是指将参数的地址(引用)拷贝一份传递给方法。在方法内部对参数进行修改会影响原始的参数。下面是一个简单的示例代码:

public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");
        changeValue(sb);
        System.out.println(sb.toString());  // 输出:Hello World
    }

    public static void changeValue(StringBuilder sb) {
        sb.append(" World");
    }
}

在上述代码中,changeValue方法接收一个StringBuilder类型的参数sb。在方法内部,使用append方法将参数sb的值修改为Hello World,并在main方法中输出sb的值时,结果也是Hello World

父子类之间的参数传递

在Java中,子类可以继承父类的属性和方法。在父子类之间传递参数时,可以通过方法重写和多态实现。

方法重写

方法重写是指子类重写(覆盖)父类的方法。当子类重写了父类的方法后,可以通过父类的引用调用子类的方法。下面是一个简单的示例代码:

public class Animal {
    public void move() {
        System.out.println("Animal can move");
    }
}

public class Dog extends Animal {
    @Override
    public void move() {
        System.out.println("Dog can run and walk");
    }

    public void bark() {
        System.out.println("Dog can bark");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Dog();
        animal.move();  // 输出:Dog can run and walk
    }
}

在上述代码中,Animal类有一个move方法,子类Dog继承了Animal类,并重写了move方法。在main方法中,通过父类的引用animal调用move方法时,实际上调用的是子类Dogmove方法。

多态

多态是指同一个方法可以根据不同的对象产生不同的行为。当父类的引用指向子类的对象时,可以通过父类的引用调用子类的方法。下面是一个简单的示例代码:

public class Animal {
    public void move() {
        System.out.println("Animal can move");
    }
}

public class Dog extends Animal {
    public void move() {
        System.out.println("Dog can run and walk");
    }

    public void bark() {
        System.out.println("Dog can bark");
    }
}

public class Cat extends Animal {
    public void move() {
        System.out.println("Cat can climb and jump");
    }

    public void meow() {
        System.out.println("Cat can meow");
    }
}

public class Main {
    public static void main(String[] args) {