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

  面向对象和面向过程,是两种不同的处理问题的角度。   面向过程更注重事情的每一个步骤及顺序,面向对象更注重事情有哪些参与者(对象)、及各自需要做什么。   比如:洗衣机洗衣服   面向过程会将任务拆解成一系列的步骤(函数),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("看家");  
    }  
}

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

吃鱼
抓老鼠
吃骨头
看家
吃鱼
抓老鼠
经验分享 程序员 微信小程序 职场和发展