聊聊Java面向对象(OOP)

面向对象编程(OOP)是一种编程范式,以类和对象为基本单元,利用封装、继承和多态提高代码的可维护性和重用性。通过对比面向过程,OOP更注重模块化,降低了代码的耦合度。本文通过实例展示了如何在Java中实现继承,从而说明OOP的特性。
摘要由CSDN通过智能技术生成
  • 什么是面向对象?

从我们开始接触Java这门语言开始,就有人告诉我们这是一门面向对象的语言。有的时候我们还可以听到网上的程序员(媛)说没有找到对象,new一个不就行了嘛。那什么是面向对象呐?OOP一种编程范式或编程风格,以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石。

举个最简单点的例子来区分面向过程和面向对象:

今天你上完课回寝室想喝奶茶,那你会怎么办呢?你有两个选择

1、到超市去卖一杯优乐美,然后回寝室烧水,然后再等泡好,最后再喝。

2、去奶茶店,张开嘴:老板!来一杯奶茶!

看出来区别了吗?1是面向过程,2是面向对象。

面向对象有什么优势呢?首先你不需要知道奶茶是怎么做的,降低了耦合性。如果你突然不想喝奶茶了,明天想吃一个冰淇淋,对于1的你可能不太容易了,还需要重新食材什么的。对于2来说太容易了,大喊:老板!今天来个冰淇淋吧,提高了可维护性。总的来说就是降低耦合,提高维护性!

  • 面向过程和面向对象的优缺点

面向过程:

优点:流程化使得编程任务明确,具体步骤清楚,便于节点分析。效率高,面向过程强调代码的短小精悍,善于结合数据结构来开发高效率的程序。缺点:代码重用性低,扩展能力差。

面向对象:

优点:结构清晰,代码重用率高,可继承,可覆盖,低耦合。缺点:性能比面向过程差。

  • 面向对象的三大特性

1.封装:

将一些属性和方法隐藏起来,提取出来成一个类,好吧我们上面的喝奶茶例子,我们不用关心他的生产了,它的生产交给一个特定的店,我们直接用这个店来卖就是了!

2.继承:

提高代码复用性,继承是多态的前提

3.多态:

父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。

下面我们不说理论了,直接上手代码加深理解

  • 继承测试环境准备:

1.我们先来建一个父类,也就是总类,动物是一个总称,再定义一个Eat方法和Name属性

public class Animal {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void Eat() {
        System.out.println("我是来自Animal类");
    }
}

2.我再来写2个派生类,Rabbit和Leopard,我们来思考哈,他们是不是都要,那么我们就可以去继承Animal类的使用属性和方法,继承关键词extends,我们再类名后面加上extends并且跟上你要继承的那个类即可实现方法的复用

Rabbit.java

public class Rabbit extends Animal{
    private String name;
    @Override
    public void Eat() {
        //这个super.Eat()表示是调用父类的Eat方法
        // 如果不加这句话就不会调用父类的方法
        super.Eat();
        System.out.println(getName()+"吃饭!");
    }
}

Leopard.java

public class Leopard extends Animal{
    private String name;
    @Override
    public void Eat() {
        //我们这个类就不要supper
        System.out.println(getName()+"吃饭!");
    }
}

总结:从上面的两个类来个我们都没有写get和set,然而我们却能使用get的获取方法,这个就是继承,因为你的父类有get和set你就可以复用你父类的!

3.我们来建一个测试类testExtends.java

public class testExtends {
    public static void main(String[] args) {
        Leopard leopard = new Leopard();
        leopard.setName("豹子");
        leopard.Eat();
        System.out.println("--------------");
        Rabbit rabbit = new Rabbit();
        rabbit.setName("兔子");
        rabbit.Eat();
    }
}

4.哈哈,写了半天了,我们最后来看看测试效果

 注意点:从上面的测试代码我们可以看出来,我们的豹子类没有用supper调用父类的Eat方法,然后就没有出现"我来自Animal类"这句话。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值