黑马程序员技术交流社区

标题: 我所认知的面向对象 [打印本页]

作者: 吃货丶草帽    时间: 2018-8-28 15:32
标题: 我所认知的面向对象
  面向对象的思想可以理解成一种偷懒的过程,就是调用前人写好的一些接口、类,从而达到我们的目的。这样可以做到快速的编写代码,并且减少了代码的复写性。
  面向对象的三大特性:封装性,继承性和多态性。
封装:
假设在合作开发的时候,有人负责创建类来提供服务,有人收集使用类来快速实现程序开发,我们把第一种人暂且叫类(服务)创建者,第二种人叫做使用服务(类)者。
那么在这种情况下,创建者对自己的类只需要把必需的功能给使用者就可以了,使用者无需关心创建者是怎么样实现类的细节,拿来用就好了。这样创建者的代码进行封装,使用者无法触及,防止使用者随意修改,减少了bug的产生,还有就是创建者对封装的这些代码修改不会对使用者造成影响,比如类创建者在一开始创建类的时候某功能写的简单了,后来为了提高性能,那么修改这部分代码,实际上对使用者是毫无影响的。

继承:
当你发现对象之间存在诸多相似性的时候,并不需要每个都创建独立的对象,可以找出他们的相同点作为基类(父类),进而在衍生出差异的类(子类),这样子父类就包含子类所有共享的行为特性了,子类就以不同的实现方式存在。

多态:
狗可以称为动物,猫可以称为动物。多态在于你可以不在意具体对象类型而使用它们共同的属性:
public class Animal {
public void eat() {
            System.out.print("吃东西。。");
} }
public class Dog extends Animal {
@Override
public void eat() {
              System.out.println("吃骨头");
} }
public class Cat extends Animal {
@Override
public void eat() {
                  System.out.println("吃鱼");
} }
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
eatSome(dog);
eatSome(cat);
}
static void eatSome(Animal animal) {
        animal.eat();
} }

输出:
吃骨头 吃鱼
在这里可以看到dog和cat向上转型为Animal。向上转型是安全的,向下转型却是危险的,例如将Animal转为它的子类,因为此刻Animal既不知道是Dog还是Cat,所以向下转型还需要专门指定对象,即强制转换。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2