面向对象编程(基础)——1.面向对象和面向过程

面向对象和面向过程编程思想及区别

面向过程和面向对象都是对软件分析,设计和开发的一种思想,它指导着人们以不同的方式去分析,设计和开发软件。对应面向对象就分别称为面向对象分析(OOA),面向对象设计(OOD),面向对象编程(OOP)。C语言是一种典型的面向过程语言,Java是一种典型的面向对象语言。

  • 面向过程:按步骤实现,并将步骤对应成方法,一步一步完成。
    比如开车:1.发动车 2.挂挡 3.踩油门 4.走
    面向过程适合简单,不需要协作的事务
  • 面向对象:怎么设计这个事务。
    比如造车:车由轮胎,发动机,车壳,座椅,挡风玻璃组成。为了效率高,我们找轮胎厂制作轮胎,发动机厂制造发动机,最后进行组装。
  • 面向对象有三大特征:封装性,继承性和多态性。而面向过程没有继承性和多态性,并且面向过程的封装只是封装功能,而面向对象可以封装数据和功能。
  • 比喻:面向对象是盖浇饭,面向过程是蛋炒饭,盖浇饭的好处就是“菜”“饭”分离,提高了制作盖浇饭的灵活性,饭不满意就换饭,菜不满意就换菜,可维护性好,饭和菜的耦合性低。蛋炒饭将蛋和饭和在一起,想换任何一种都很难,耦合度很高,维护性差。

面向对象的三大特性

  1. 继承
    继承的基本思想:基于已有的类创建新的类。继承已存在的类就是继承这些类的方法,而且可以增加一些新的方法和手段,使新类能够适应新的情况。
    继承需要符合的关系是:is-a关系,表示一个更特殊的类与一个更一般的类之间的关系
    在这里插入图片描述
    上图中,哺乳动物继承了动物,这说明动物的特性哺乳动物都有。
    代码示例:
public class ExtendsTest{
    public static void main(String[] args) {
        Student s = new Student("Vicky",165,"Java");
        s.rest();
        s.study();
    }
}
class Person {
    String name;
    int height;
    public void rest(){
        System.out.println("要好好加油");
    }  
}
class Student extends Person {
    String major; 
    public void study(){
        System.out.println("进入阿里");
    }  
    public Student(String name,int height,String major) {
        //天然拥有父类的属性
        this.name = name;
        this.height = height;
        this.major = major;
    }
}
  1. 封装
    需要让用户知道的暴露出来,不需要让用户知道的全部隐藏起来。封装就是把对象的属性和操作结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。
    封装的优点:1. 提高代码的安全性 2.提高代码的复用性 3.“高内聚”:封装细节,便于修改内部代码,提高可维护性 4.“低耦合”:简化外部调用,便于使用者使用,便于扩展和协作
    Java是使用“访问控制符”来控制哪些细节需要封装,哪些细节需要暴露的。Java中4种“访问控制符”:private,default,protected,public。
    4种访问控制符的访问权限范围
    在这里插入图片描述
  2. 多态
    多态指的是同一个方法调用,由于对象不同可能会有不同的行为。
    多态的要点:
    1.多态是方法的多态,不是属性的多态
    2.多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象
    3.父类引用指向子类对象后,用该父类引用调用子类重写的方法。
    代码示例
class Animal {
    public void shout() {
        System.out.println("叫了一声!");
    }
}
class Dog extends Animal {
    public void shout() {
        System.out.println("旺旺旺!");
    }
    public void seeDoor() {
        System.out.println("看门中....");
    }
}
class Cat extends Animal {
    public void shout() {
        System.out.println("喵喵喵喵!");
    }
}
public class TestPolym {
    public static void main(String[] args) {
        Animal a1 = new Cat(); // 向上可以自动转型
        animalCry(a1);
        Animal a2 = new Dog();
        animalCry(a2);
      
        Dog dog = (Dog)a2;//向下需要强制类型转换
        dog.seeDoor();
    }
 
    // 有了多态,只需要让增加的这个类继承Animal类就可以了。
    static void animalCry(Animal a) {
        a.shout();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值