软考
APP下载

举例说明继承封装多态

继承、封装和多态是面向对象程序设计的三大特征,也是面向对象语言的基本概念。继承是指一个类可以派生出子类,子类拥有父类的所有属性和方法,可以在其基础上进行扩展;封装是指将数据和操作封装在一个类中,对外部类隐藏内部实现细节,仅对外部提供公共接口;多态是指通过同一个方法名调用不同的方法实现不同的功能。本文将分别从继承、封装和多态三个方面详细说明其概念和实现方法,并举例说明其在实际编程中的应用。

继承的概念和实现方法

继承是指一个类可以派生出子类,子类可以继承父类的属性和方法,同时还可以在其基础上进行扩展和修改。在具体实现时,可以通过在类名后加上冒号和父类名的方式进行继承,如下所示:

```

class B extends A {

// 子类的具体实现

}

```

其中,B 是子类,A 是父类,通过 extends 关键词进行继承。子类可以新增属性和方法,同时也可以重写父类的方法。下面举一个例子,说明继承的实际应用:

```

class Animal {

constructor(name) {

this.name = name;

}

eat() {

console.log(`${this.name} is eating.`);

}

}

class Cat extends Animal {

meow() {

console.log(`${this.name} is meowing.`);

}

}

const tom = new Cat('Tom');

tom.eat(); // Tom is eating.

tom.meow(); // Tom is meowing.

```

在上面的代码中,Animal 是父类,Cat 是子类,Cat 继承了 Animal 的属性和方法,同时还添加了 meow 方法。这样,我们就可以通过 tom 实例对象进行 eat 和 meow 方法的调用。

封装的概念和实现方法

封装是指将数据和操作封装在一个类中,对外部类隐藏内部实现细节,仅对外部提供公共接口。具体实现时,需要使用访问修饰符控制访问权限,比如 public、private 和 protected 关键词。其中,public 表示公共属性和方法,可以被外部访问;private 表示私有属性和方法,只能在类的内部进行访问;protected 表示受保护的属性和方法,只能在类的内部或其子类中进行访问。下面通过一个例子,说明封装的实际应用:

```

class Person {

constructor(name, age) {

this.name = name;

this.age = age;

}

getName() {

return this.name;

}

setName(name) {

this.name = name;

}

getAge() {

return this.age;

}

setAge(age) {

this.age = age;

}

}

const tom = new Person('Tom', 20);

console.log(tom.getName()); // Tom

console.log(tom.getAge()); // 20

tom.setName('Tommy');

tom.setAge(21);

console.log(tom.getName()); // Tommy

console.log(tom.getAge()); // 21

```

在 Person 类中,将 name 和 age 属性定义为私有属性,通过 getName、setName、getAge、setAge 四个方法对其进行访问和赋值。这样,外部代码无法直接访问和修改这些属性,必须通过公共接口进行操作,数据的安全性得到了提高。

多态的概念和实现方法

多态是指通过同一个方法名调用不同的方法实现不同的功能。具体实现时,可以使用继承和重载两种方式。继承实现的多态是指子类重写父类的方法,从而实现不同的功能;重载实现的多态是指同一个类的不同方法拥有相同的名称,但参数不同,从而实现不同的功能。下面通过一个例子,说明多态的实际应用:

```

class Animal {

speak() {

console.log('...');

}

}

class Dog extends Animal {

speak() {

console.log('woof!');

}

}

class Cat extends Animal {

speak() {

console.log('meow!');

}

}

function makeSound(animal) {

animal.speak(); // 多态调用

}

const tom = new Cat();

const spike = new Dog();

makeSound(tom); // meow!

makeSound(spike); // woof!

```

在上面的代码中,Animal 是父类,Dog 和 Cat 是子类。Animal 中的 speak 方法是一个空方法,子类分别重写了这个方法并实现了不同的功能。makeSound 函数接受一个参数 animal,调用该参数的 speak 方法,实现了多态。通过传入不同的子类实例对象,调用了不同的方法,实现了不同的功能。

备考资料 免费领取:系统分析师报考指南+考情分析+思维导图等 立即下载
真题演练 精准解析历年真题,助你高效备考! 立即做题
相关阅读
系统分析师题库