什么是面向对象?谈谈你对面向对象的理解

  面向对象和面向过程,是两种不同的处理问题的角度。
  面向过程更注重事情的每一个步骤及顺序,面向对象更注重事情有哪些参与者(对象)、及各自需要做什么。
  比如:洗衣机洗衣服
  面向过程会将任务拆解成一系列的步骤(函数),1、打开洗衣机——>2、放衣服——>3、放洗衣粉——>4、清洗——>5、烘干
  面向对象会拆出人和洗衣机两个对象:
    人:打开洗衣服、放衣服、放洗衣粉
    洗衣机:清洗、烘干
  从以上例子能看出,面向过程比较直接高效,而面向对象更易于复用、扩展和维护。

面向对象的三大特征
封装:封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项
内部细节对外部调用不透明,外部调用无需修改或者关心内部实现
1.javabean的属性私有,提供getset方法对外访问,因为属性的赋值或者获取逻辑只能由javabean本身决定。而不能由外部胡乱修改。
2.orm框架
操作数据库,我们不需要关心链接是如何建立的、sql是如何执行的,只需要引入mybatis,调方法即可。
继承:继承基类的方法,并做出自己的改变和扩展。
子类共性的方法或属性直接使用父类的,而不需要自己再定义,只需要扩展个性化的。
多态:多态是同一个行为具有多个不同表现形式或形态的能力。基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同。
多态存在的三个必要条件:继承,方法重写,父类引用指向子类对象

父类类型 变量名 = new 子类对象;
变量名.方法名();

无法调用子类特有的功能

public class Test {
    public static void main(String[] args) {
      show(new Cat());  // 以 Cat 对象调用 show 方法
      show(new Dog());  // 以 Dog 对象调用 show 方法
                
      Animal a = new Cat();  // 向上转型  
      a.eat();               // 调用的是 Cat 的 eat
      Cat c = (Cat)a;        // 向下转型  
      c.work();        // 调用的是 Cat 的 work
  }  
            
    public static void show(Animal a)  {
      a.eat();  
        // 类型判断
        if (a instanceof Cat)  {  // 猫做的事情 
            Cat c = (Cat)a;  
            c.work();  
        } else if (a instanceof Dog) { // 狗做的事情 
            Dog c = (Dog)a;  
            c.work();  
        }  
    }  
}
 
abstract class Animal {  
    abstract void eat();  //Note:父类中没有work方法
}  
  
class Cat extends Animal {  
    public void eat() {  
        System.out.println("吃鱼");  
    }  
    public void work() {  
        System.out.println("抓老鼠");  
    }  
}  
  
class Dog extends Animal {  
    public void eat() {  
        System.out.println("吃骨头");  
    }  
    public void work() {  
        System.out.println("看家");  
    }  
}

执行以上程序,输出结果为:

吃鱼
抓老鼠
吃骨头
看家
吃鱼
抓老鼠
上一篇:SQLite3 Cpp基本使用


下一篇:PIL中的Image转化为数组array的方法