欢迎访问宙启技术站
智能推送

Java函数:如何使用继承和多态?

发布时间:2023-06-19 23:43:32

Java是一种面向对象的编程语言,面向对象的编程的一个重要特征就是继承和多态。Java中的继承和多态都是通过函数实现的。在Java中,父类和子类之间可以共享函数,子类可以使用父类的函数,父类的函数也可以被子类使用。这种共享可以提高代码的复用性和可维护性。本文将从继承和多态的概念、继承和多态的实现方法以及继承和多态的应用等方面介绍Java中的继承和多态。

一、继承和多态的概念

继承是指一个类从另一个类获得其属性和方法,被继承的类称为父类(或超类、基类),继承的类称为子类(或派生类)。子类可以覆盖(或重载)父类的属性和方法,也可以增加自己的新属性和方法,但是不能去掉父类的属性和方法。在Java中,使用extends关键字表示一个类继承另一个类。例如:

public class Animal {

    public void eat() {

        System.out.println("动物在吃东西");

    }

}

public class Dog extends Animal {

    public void bark() {

        System.out.println("狗在汪汪叫");

    }

}

在上面的代码中,Dog类继承了Animal类,因此可以调用父类的eat方法,同时增加自己的bark方法。

多态是指一个对象变成多个类型的能力。在Java中,多态可以通过重载(overloading)和覆盖(overriding)实现。重载是指在一个类中定义多个方法,方法名相同但参数类型和个数不同,可以根据不同的参数调用不同的方法。覆盖是指子类定义与父类同名、同参数、同返回类型的方法,并且不能调用父类的该方法,只能调用自己的该方法。多态可以提高代码的灵活性和可扩展性。例如:

public class Animal {

    public void eat() {

        System.out.println("动物在吃东西");

    }

}

public class Dog extends Animal {

    public void eat() {

        System.out.println("狗在吃骨头");

    }

}

public class Cat extends Animal {

    public void eat() {

        System.out.println("猫在吃鱼");

    }

}

在上面的代码中,Animal类定义了一个eat方法,Dog类和Cat类都继承了Animal类并覆盖了eat方法,调用不同的对象的eat方法可以得到不同的输出结果。

二、实现继承和多态的方法

Java中实现继承和多态的方法主要有三种:继承、抽象类和接口。

1. 继承

继承是最基本的面向对象编程的实现方式,可以通过extends关键字实现。在继承中,父类中的方法和属性被子类继承,可以被子类直接使用。但是继承有一个缺点,它可能导致类的层次结构过于庞大,影响程序的可读性和扩展性。例如:

public class Animal {

    public void eat() {

        System.out.println("动物在吃东西");

    }

}

public class Dog extends Animal {

    public void bark() {

        System.out.println("狗在汪汪叫");

    }

}

public class Cat extends Animal {

    public void mew() {

        System.out.println("猫在喵喵叫");

    }

}

在上面的代码中,Dog类和Cat类都继承了Animal类,如果再有其他的动物类,将会导致类的层次结构越来越庞大。

2. 抽象类

抽象类是指没有实现的类,只有方法定义的类。抽象类不能直接进行实例化,必须由子类继承并实现其中的抽象方法。抽象类可以定义抽象方法、普通方法、变量和常量等。在Java中,抽象类使用abstract关键字修饰。例如:

public abstract class Animal {

    public abstract void eat();

}

public class Dog extends Animal {

    public void eat() {

        System.out.println("狗在吃骨头");

    }

}

public class Cat extends Animal {

    public void eat() {

        System.out.println("猫在吃鱼");

    }

}

在上面的代码中,Animal类是抽象类,其中定义了一个抽象方法eat,Dog类和Cat类都继承了Animal类并实现了eat方法。如果有新的动物需要添加,只需要继承Animal类并实现eat方法即可。

3. 接口

接口是抽象类的一种特殊形式,接口中只包含抽象方法和常量,不能包含变量和普通方法。接口可以被实现(implements)或继承(extends),被实现的接口必须被实现其中的所有方法,并且可以实现多个接口,被继承的接口可以被子接口继承,子接口可以增加新的方法或常量。在Java中,接口使用interface关键字修饰。例如:

public interface Animal {

    void eat();

}

public class Dog implements Animal {

    public void eat() {

        System.out.println("狗在吃骨头");

    }

}

public class Cat implements Animal {

    public void eat() {

        System.out.println("猫在吃鱼");

    }

}

在上面的代码中,Animal接口定义了一个eat方法,Dog类和Cat类都实现了Animal接口并实现了eat方法。如果有新的动物需要添加,只需要实现Animal接口并实现eat方法即可。

三、继承和多态的应用

在Java中,继承和多态有着广泛的应用,以下是几个例子:

1. 编写通用代码

通过继承和多态可以编写通用代码,提高代码的复用性和可维护性。例如:

public abstract class Shape {

    public int x;

    public int y;

    public Shape(int x, int y) {

        this.x = x;

        this.y = y;

    }

    public abstract double getArea();

}

public class Circle extends Shape {

    public int r;

    public Circle(int x, int y, int r) {

        super(x, y);

        this.r = r;

    }

    public double getArea() {

        return 3.14 * r * r;

    }

}

public class Rectangle extends Shape {

    public int w;

    public int h;

    public Rectangle(int x, int y, int w, int h) {

        super(x, y);

        this.w = w;

        this.h = h;

    }

    public double getArea() {

        return w * h;

    }

}

在上面的代码中,Shape类是一个抽象类,Circle类和Rectangle类都继承了Shape类并实现了其中的抽象方法,定义了各自的图形对象。如果需要增加其他的图形对象,只需要继承Shape类并实现其中的抽象方法即可,提高代码的可扩展性。

2. 处理集合对象

在Java中,集合对象可以使用多态来处理,例如:

List<Animal> animals = new ArrayList<>();

animals.add(new Dog());

animals.add(new Cat());

for (Animal animal : animals) {

    animal.eat();

}

在上面的代码中,定义了一个List集合对象,其中存储了Dog和Cat对象,可以通过foreach语句遍历集合中的对象,调用各自的eat方法。

3. 实现回调函数

通过继承和多态可以实现回调函数,