这是道基础中见思想的面试题,面试官爱问这个问题。不过关于OOP三个核心众多书籍似乎莫衷一是。《Java编程思想》第7章谈到多态的开篇语便是:除了数据的抽象化(data abstraction)与继承(Inheritance)以外,面向对象编程语言的第三个核心本质便是多态(ploymorphism)。另有参考书把封装(wrap)、重载(overload)也归为OOP的特性。以上几点点确实都应算做OOP的特性,但是无论怎么组合我想多态是少不了的,如果语言不支持多态,就不能称之为面向对象的。有的语言只支持类而不支持多态,如Ada、VB,我们称它们为基于对象的语言。有人总结说:封装是优点,继承是基础,重载是特点,而多态是特征。
(1)什么是多态
多态是一种性质,应为多态性。最直白的理解就是:在程序运行时,根据类的对象来确定调用哪个函数。但是多态的意义不仅限于此,多态的意义更在于:子类型别向上转型为基类型别,从而通过一个公共函数来执行这些类中相同的方法。在C#中通过virtual和abstract来实现,在Java中省掉了virtual。下面是引举的《Java编程思想》第7章中关于多态的一个例子:
//:Musi.java
//Abstract classes and methods
Import java.util.*;
abstract classInstrument4{
inti; //storage allocated for each
public abstract void play();
public String what(){
return "Instrument4";
}
public abstract void adjust();
}
ClassWind4 extends Instrument4{
public void play(){
System.out.println("Wind4.play()");
}
public String what(){return"Wind4";}
public void adjust(){}
}
ClassPercussion4 extends Instrument4{
public void play(){
System.out.println("Percussion4.play()");
}
public String what(){return"Percussion4";}
public void adjust(){}
}
ClassStringed4 extends Instrument4{
public void play(){
System.out.println("Stringed4.play()");
}
public String what(){return"Stringed4";}
public void adjust(){}
}
ClassBrass4 extendsWind4{
public void play(){
System.out.println("Brass4.play()");
}
public void adjust(){
System.out.println("Brass4.adjust()");
}
}
class Woodwind4 extendsWind4{
public void play(){
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-26262-1.html
桃子海不會不藍海浪不會不在的
如此这般
期待宋歌手