java中的多态与golang中的多态

发布时间 2024-01-12 00:17:03作者: 远洪

多态是面向对象编程的一个重要特征。它允许不同类型的对象对同一方法进行不同的实现。具体来说,多态性指的是通过父类的引用变量来引用子类的对象,从而实现对不同对象的统一操作。

java中多态通过继承实现,在go语言中,多态通过接口实现

java多态案例

package org.example;

class Animal{
    public void sound(){
        System.out.println("动物发出叫声");
    }
}

class Cat extends  Animal{
    @Override
    public void sound() {
        System.out.println("猫叫");
    }
}
class Dog extends Animal{
    @Override
    public void sound() {
        System.out.println("狗叫");
    }
}

public class App 
{
    public static void main( String[] args )
    {
        Animal cat = new Cat();    // 父类引用指向子类对象
        Animal dog = new Dog();    // 父类引用指向子类对象
        cat.sound();
        dog.sound();
    }
}

运行结果:

 go多态案例

go语言中,多态可以体现为多态参数和多态数组,例如:

package main

import (
    "fmt"
)

type Usb interface{
    Connect()
    DisConnect()
}

type Phone struct{
    Name string
}

/*
*  Phone实现了Usb 接口(是指实现了Usb接口的所有方法)
*/
func(p Phone) Connect(){
    fmt.Println("手机连接...")
}

func(p Phone) DisConnect(){
    fmt.Println("手机断开连接...")
}

type Camera struct{
    Name string
}

func(c Camera) Connect(){
    fmt.Println("相机连接...")
}

func(c Camera) DisConnect(){
    fmt.Println("相机断开连接...")
}

type  Computer struct{
}

func(c Computer) Working(u Usb){     //  这里就提现了一个多态的实现 (①里提现为多态参数)
    u.Connect()
    u.DisConnect()
}

func main(){
    phone := Phone{"手机"}
    camera := Camera{"相机"}
    computer := Computer{}
    computer.Working(phone)    
    computer.Working(camera)

    var ar [2]Usb     // 多态数组的提现 ar 中放了两个不同的结构体
    ar[0] = phone
    ar[1] = camera
    fmt.Println(ar)
}

运行结果: