回顾oop面向对象的编程 以及多态

OPP(Oriented Process Programming)
* 面向过程编程
* 关注的是你要完成的事情本身。
* 所有的设计思路都是围绕完成具体事情设计的。
* 为了完成相应的事情,你会分为
* 第一步
* 第二步
* …
* 第n步
* 完成
*
* 要把大象装冰箱。
* 第一步:把冰箱门打开
* 第二步:把大象放进去
* 第三步:把冰箱门关上
*
*
* OOP(Oriented Object Programming)
* 面向对象编程
* 同样也是完成具体的事情。
* 但是你关注的重心不是这件怎么一步步完成?
* 而是在整个事情进行中,都有哪些对象参与
* 这些参与的对象需要具有什么样的功能或特征。
* 换句话说就是关注类的设计
* 把大象装进冰箱。
* 需要有冰箱
* 需要有大象
* 需要有人
*
* public class 冰箱{
* 此处省略属性,长宽高,功率
* 开门(){ 。。。}
* 关门(){。。。}
* 冷冻(){。。。}
* }
*
* public class 大象{
* 此处省略属性,身高,体重,年龄
* 行走(){。。。}
* 吃饭(){。。。}
* }
*
* public class 人{
* 此处省略属性,性别,姓名
* 打开(冰箱){
* 冰箱.开门();
* }
*
* 关闭(冰箱){
* 冰箱.关门()
* }
*
* 驱赶(大象){
* 大象.行走()
* }
* }
*
* public class Test{
* main{
* 大象 a = new 大象()
* 冰箱 b = new 冰箱()
* 人 c = new 人()
* 人 d = new 人()
*
* c.打开(b);
* d.驱赶(a);
* c.关闭(b);
*
* }
* }
*
* */

  • 类:对事物的抽象和提炼,可以把共性的信息提炼出来,做成一个模板。
    * 学生:
    * 崔晨燚 姓名 性别 身高 ;睡觉,吃饭,打游戏
    * 娄亚峰 姓名 性别 身高 ;睡觉,吃饭,打游戏
    * 都具有姓名 性别 身高,都可以睡觉,吃饭,打游戏
    * 把提炼的特征 变为类的属性
    * 把提炼的行为 变为类的方法
    *
    * public class Person{
    * private String name;
    * private String sex;
    * private double height;
    *
    * public void eat(String food){
    * System.out.println(“正在吃”+food);
    * }
    * public void sleep(){
    * System.out.println(“睡觉”);
    * }
    * public void playGames(String game){
    * System.out.println(name + “正在玩”+game);
    * }
    *
    * }
    *
    * 对象:是类的具体实例。
    * 既然对象是类的具体实例,想要使用对象,第一件事就是
    * 实例化对象(创建对象)
    * Person p = new Person();
    * p.eat(“炸鸡”);
    * p.playGames(“扫雷”);
    *
    * Person p1 = new Person();
    * p1.playGame(“LOL”);
    *
    * 使用面向过程表示一个完整的事物,比较麻烦。
    * 而且无法给这个事物添加功能
    *
    * /
    /

    String[] names = {“崔晨燚”,“娄亚峰”};
    String[] sexes = {“男”,“男”};
    double[] heights = {1.75,1.76};

    for(int i = 0; i < names.length;i++) {
    System.out.println(names[i] + sexes[i] + heights[i]);
    }
    */

  • 面向对象的三大特征:
    * 封装
    * 隐藏内部细节,对外提供访问的接口
    * (广义的接口,这里的接口指的是提供访问的方式)。
    * 封装包含以下几个维度:
    * 1、对属性的封装------setter和getter
    * 具体做法,把属性私有化 使用private修饰
    * 提供setter和getter方法
    * 对属性封装,能确保属性的安全性。不容易出现脏数据
    * 2、对行为(方法)的封装
    * 对具体功能实现的封装。
    * 隐藏实现细节,对外提供调用方式。
    * 具体做法,在类中定义一个public修饰方法
    * 并且实现功能,使用的时候,通过对象名.方法就完成了功能的调用
    * 3、对类的封装
    * 把属性和行为封装到类里。
    * 使用的时候,创建对象,使用具体的功能。
    * 继承
    * 当两个对象特征和行为完全相同的时候,我们采用类创建不同的对象即可。
    * 但是如果2个对象很相似但是不完全相同,这个时候,我们可以采用继承的方式
    * 优化类的定义。
    * 一般相似的两个类,一定会有一个从属关系。
    *
    * 例如:动物类 有性别 能吃饭,能睡觉,能行走。
    * :猫类 有性别 命的条数 能吃饭,能睡觉,能行走,能卖萌
    * 猫 is a 动物
    * 猫是一个动物
    * 不能反过来说 动物是个猫。
    *
    * 比较模糊的比较抽象往往是父类,
    * 比较具体的往往是子类。
    *
    * 父类也叫超类、基类、superclass
    * 子类是通过扩展父类延伸(派生)出来的,子类也叫派生类
    *
    * 关于继承:
    * 子类可以在父类的基础上增加新的属性和方法
    * 子类还可以重写(override)父类的方法
    *
    * 子类能从父类那里继承什么呢?
    * 答:继承了所有非private的属性和方法。
    * 本质上,私有的属性和方法也继承了,只不过
    * 不能直接访问。
    *
    * 父类的构造方法是继承不了的!
    *
    * 为什么呢?
    * 因为构造方法的特点是:方法名必须与类名相同。
    *
    * 但是你可以调用父类的构造方法。
    *
    * 调用父类的构造方法使用super(),super(参数列表)
    *
    * 多态
    * 多态:从字面意思理解,同一个方法有多种不同的实现。
    * 不同对象(类)对行为相同行为(方法)的不同实现。

  • 例如:睡觉(public void sleep())

  • 狗:趴着睡

  • 猫:卧着睡

  • 人:躺着睡

  • 马:站着睡

  • 在java里,多态用于写抽象功能。提取共性,但是在运行的时候

  • 执行的又是特性(而不是共性)。

  • 用的时候(编译期),把子类当父类看。无论你是僵尸还是路障僵尸还是报纸僵尸

  • 都当成僵尸来看待。(相当于只看了共性。)

  • 真正执行方法的时候(运行期),执行的是子类方法。

  • 想要在java里面实现多态有几个前提:

  • 1、必须存在继承关系。

  • 2、子类必须重写父类的方法。

  • 3、执行的是子类的实现。

  •   public static void main(String[] args) {
     Animal[] animals = new Animal[5];
     Animal a = new Animal();
     Animal b = new Cat();
     Animal c = new Dog();
     Animal d = new Horse();
     Animal e = new Person();
     
     animals[0] = a;
     animals[1] = b;
     animals[2] = c;
     animals[3] = d;
     animals[4] = e;
     
     for (Animal animal : animals) {
     	animal.sleep();
     }
     }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值