aardio 继承与多态1

By xwcxf at 20 小时前 • 0人收藏 • 11人看过

二、多态
1. 多态的实际应用

写一个猫狗的例子理解多态,发现它的核心是"同一个方法名,不同对象有不同表现":


  • Dog和Cat都继承Animal,但各自的speak方法不一样

  • 定义一个通用函数makeSound,不管传入的是狗还是猫,都能正确调用对应的发声方法



class Animal {
    ctor(name) {
        this.name = name;
        }
    speak = function() {
        return this.name + " makes a sound.";
    }
}

class Dog {
    ctor(...) {
        this = ..Animal(...);
    }
    speak = function() {
        return this.name + " barks.";
    }
}

class Cat {
    ctor(...) {
        this = ..Animal(...);
    }
    speak = function() {
        return this.name + " meows.";
    }
}

function makeSound(animal) {
    console.log(animal.speak());
}

import console;
var myDog = Dog("Buddy");
var myCat = Cat("Whiskers");
makeSound(myDog);  // 输出:Buddy barks.
makeSound(myCat);  // 输出:Whiskers meows.
console.pause();



2. 数组中的多态实践

把不同动物对象放到数组里统一处理,更能体现多态的便利:


  • 不需要区分数组里的对象是狗还是猫

  • 直接循环调用speak方法,多态会自动根据对象类型执行对应的逻辑



class Animal {
    ctor(name) {
        this.name = name;
    }
    speak = function() {
        return this.name + " makes a sound.";
    }
}

class Dog {
    ctor(...) {
        this = ..Animal(...);
    }
    speak = function() {
        return this.name + " barks.";
    }
}

class Cat {
    ctor(...) {
        this = ..Animal(...);
    }
    speak = function() {
        return this.name + " meows.";
    }
}

import console;
var animals = {Dog("Buddy"), Cat("Whiskers")};
for(k, animal in animals) {
    console.log(animal.speak());
}
// 输出:
// Buddy barks.
// Whiskers meows.
console.pause();



三、挑战:用继承和多态计算图形面积

1. 要求

  • 定义Shape父类,包含计算面积的area方法

  • 定义Circle和Rectangle子类,重写area方法

  • 用数组存储不同图形对象,遍历输出面积



2. 代码实现

import math;
import console;

class Shape {
    area = function() { return 0; }  // 父类默认返回0
}

class Circle {
    ctor(radius, ...) {
        this = ..Shape(...);
        this.radius = radius;
    }
    area = function() {
        return ..math.pi * this.radius * this.radius;
    }
}

class Rectangle {
    ctor(width, height, ...) {
        this = ..Shape(...);
        this.width = width;
        this.height = height;
    }
    area = function() {
        return this.width * this.height;
    }
}

var shapes = {Circle(5), Rectangle(4, 6)};
for(k, shape in shapes) {
    console.log("面积: " + shape.area());
}
// 输出:
// 面积: 78.539816339745
// 面积: 24
console.pause();



四、总结

  • 继承的核心:子类复用父类的属性和方法,通过..父类名(...)实现构造继承,避免重复代码。

  • 多态的核心:相同方法名在不同对象上有不同实现,依赖方法重写,让代码能"灵活应变"。

  • 两者的结合:继承解决代码复用,多态解决功能扩展,一起用能让程序结构更清晰、更好维护。


因为字数限制原因,我把这一节与分为两次发,接着 aardio 继承与多态这篇文章


登录后方可回帖

登 录
信息栏
本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...