参考答案:
一般我们可以围绕面向对象的几个特征去展开:
个人理解:
面向对象编程有点类似于数学建模,一般用于解决一个复杂的问题,解决这个问题通常涉及到多个物理或抽象概念,并且它们之间会有各种关系及交互行为。面向对象编程其实就是从实际问题出发将这些概念抽象映射成一个对象,这个过程就是封装和抽象。
一个对象通常由若干对象属性和对象方法组成,对象方法可认为是该对象可以执行某个动作的能力,这个能力应该是和对象相关的,如果完全没关系,那么这个对象看起来就会不伦不类,比如一个鱼类对象有飞行的方法。
一个对象如果只有属性,那么这个对象我们称为数据对象;如果只有方法,一般这个对象是个工具类。如果一个对象即没有属性也没有方法,那就是个空对象,这种对象很少见,一般用于内存对齐时用到。
多个对象之间会有某种关系,对象之间关系常见的有作为对象属性关联,另一个就是继承了。也就是说在面向对象中继承是一种组织对象关系的一种方式。对于类A和B,如果说类A中有一个B类的属性,则可以描述为:A has a B。如果A继承B,则可描述为:A is a B
而多态主要指方法的重写(Override)和重载。
方法重写是指子类中的方法签名和父类中的方法签名完全一致但是方法体不一样,因此我们说子类重写了父类的方法。关于方法重写有一个标记注解@Override,在方法上使用这个注解,表示该方法是重写父类的某个方法,编译器在编译阶段会检查方法重写是否有问题,之所以这样做是因为方法签名稍微有一点不一样,就相当于定义了一个新方法,这个可能与开发者的预期不一致。
方法重载指的是在同一个类中,有多个方法名一样,但是方法参数个数或类型不一样(也就是方法签名不一样)。这里有一点要注意:如果只是方法的返回值不一样其他都一样的话,这种情况不能算重载,编译器也会报错,原因就是方法返回值调用者不一定会用,因此为了避免歧义,Java不允许通过返回值的不同重载方法。