java基础-面向对象

一、面向对象

面向过程:

主要以结果为导向的思想,至于中间过程的设计不着重考虑,
在整个程序的维护性、可读性、可拓展性都会较差。
- 黑猫白猫抓到老鼠就是好猫

面向对象:

 主要以问题的个体角度思考问题,从个体本身(对象)出发,
 赋予当前这个个体一些属性和方法,让它自己拥有解决问题的能力。
  - 授人以鱼不如授人以渔
 我开车

二、面向对象的三大基本特征

封装:将该隐藏的隐藏,该暴露的暴露

在java程序中,是依靠类和方法的方法实现一个个体的封装的(权限限定符 + 包路径)。

继承:是Java中代码复用的重要手段(子类可以调用父类的部分属性和方法),在于为多态奠定了基础。

在java程序中,有另一种代码复用的重要手段,叫做组合。

什么是组合?

class A{
  private B b = new B();

  b.xxxxx();
}

思考:什么时候该用继承?什么时候该用组合?
需要判断两个类的关系:
如果是"is-a"(是一个)的关系,就需要用继承
如果是"has-a"(有一个)的关系,就需要用组合

多态:一个对象有两种类型,编译时类型和运行时类型,一旦这个对象的编译时类型和运行时类型不同时,就发生了所谓的多态

什么是编译时类型,什么是运行时类型?

A obj = new A();
A就是编译时类型
A就是运行时类型

父类的变量 指向 子类的对象 -> 多态

多态有什么用?
多态是为了提高了代码的维护性(继承保证)
提高了代码的扩展性

三、面向对象实战

/**
从前有一对兔子,到第3个月大时,每过一个月生一对兔子,小兔子到第3个月后,
每过一个月又会生一对兔子,假设兔子都不死,请问第10个月共有多少对兔子?
*/


  public class Main1 {


   public static void main(String[] args) {


    //模拟一个兔笼
    List<Rabbit> rabbits = new ArrayList<>();


    //模拟10个月中兔子生崽的行为
    for (int i = 1; i <= 10; i++) {


        if(i == 1){
            //第一个月需要往兔笼中添加一对兔子
            rabbits.add(new Rabbit());
        } else {
            //以后,每个月都尝试让兔子生崽


            List list = new ArrayList(rabbits);


            for (Rabbit rabbit : new ArrayList<>(rabbits)) {
                //兔子每个月都要涨岁
                rabbit.addAge();
                //再让每个兔子尝试生崽
                Rabbit son = rabbit.son();


                //如果生出了小兔子 就放入兔笼
                if(son != null){
                    rabbits.add(son);
                }
            }
        }
    }




    System.out.println("10个月后兔子的对数:" + rabbits.size());
   }
  }


  /**
  兔子类
   */
   class Rabbit{


  /**
  兔子的属性
   */
  private int age = 1;//月龄


  /**
   兔子的行为
   */
  public void addAge(){
    this.age++;
  }


  /**
  生崽的行为
  */
  public Rabbit son(){
    if(age >= 3) {
        return new Rabbit();
    }
    return null;
  }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我要做那最靓的仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值