Java基础 -- 面向对象特性

简介: Java基础 -- 面向对象特性

🍕前面的话🥞

今天状态不是很好,那么就想着把前面的 Java 基础拿出来翻看一下。顺便复习一下。因此,也就写下了这篇文章。当然是由感而发啊。如果有哪些不足的地方还请小伙伴们细细指出嗷。其实现在大部分的人都是只注重编程技巧或怎样编程上,当然一些基础概念也是十分的重要的。正所谓 基础不牢,地动山摇。在这一片文章中,我将从这两个方面去进行阐述喽。

👩‍💻博客主页: 崇尚学技术的科班人的博客主页
✨欢迎关注🖱点赞🎀收藏⭐留言✒
🔮本文由 崇尚学技术的科班人 原创,csdn首发!
😘系列专栏:java
🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦

在这里插入图片描述

🥧面向对象特性

其实当人们谈论到 Java 的时候,大多数都会直接谈论到它是一门面向对象的编程语言。那么如果我问一个问题 Java 面向对象的三大特性是什么?。我相信大家都能够答出来,那么就是 封装、继承、多态。但是要你去详细介绍一下这三个特性的时候,又有多少人能够很快而有准确的回答出来呢?所以在这个飞速发展的时代,在这个快餐式学习横行的时代,我们有时候需要慢下来、静下来去沉淀一下了,去慢慢地、踏实地学习一下了。

那么下面我将从代码和概念两个角度进行深度讲解 Java 的面向对象特性。

🍦代码例子

  • Coffee抽象类
public abstract class Coffee {

    public abstract String getName();

    // 1. 加糖
    public void addSugar(){
        System.out.println("加糖");
    }

    // 2. 加奶
    public void addMilk(){
        System.out.println("加奶");
    }
}
  • LatteCoffee子类
public class LatteCoffee extends Coffee {
    @Override
    public String getName() {
        return "拿铁咖啡";
    }
}

想必大家对这两个代码例子应该已经熟悉的不要再熟悉了吧,这个 咖啡 作为抽象父类,其中有一个获取对应对象的抽象方法 -- getName()

  • 为什么要设计这么一个抽象方法呢?

其实作为一个抽象类呀,就比如说上面这个 咖啡 抽象类,它只是 咖啡 的一个抽象总称。所以说,咖啡的话那么就会有很多种类的咖啡。比如说,美式咖啡、拿铁咖啡等。那么我们需要根据它的名字进行判别,就通过这么一个抽象方法,当字类进行继承对应的父类的时候,那么需要对其进行重写。那么就实现了不同咖啡的不同标识了。


其上,这两段代码就涉及到了面向对象的两大特性:继承和多态。上面这样介绍一下,方便一下没有 Java 基础的同学也能看懂,如果有一定 Java 的同学的话,那么就复习一下喽。

虽然例子很简单,但是运用到了其两大重要概念。下面我将从三个特性展开详细介绍。

🍭面向对象和面向过程的区别?

我们都知道 c 语言的话,它是面向过程的;而 Java 语言的话,它是面向对象的。那么它们两者的区别是什么呢?

面向过程

  • 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
  • 缺点:没有面向对象易维护、易复用、易扩展。

面向对象

  • 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
  • 缺点:性能比面向过程低。

🧀 封装

如果在面试中,你被面试官问到了 你来详细介绍一下封装是什么意思?。你会如何回答呢?可能会有一些小伙伴会说,那不就是将一段代码进行封装成一个函数或类吗?

如果你是这样回答的话,其实 get 到了一点边了,但是你就像是一个没有学过 Java 语言的人一样,换句话说就是回答的不够专业。我这里就给出标答来了。

  • 封装:封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏

🍦继承

还是这么说呀,如果叫你详细的介绍一下肯定都是描述不太准确的。那么这就是基础不太扎实了。肯定有很多人会这样描述这个概念,那不就是 子类继承父类呀这回答的也太不专业了吧,一看就是圈外人

标答:

  • 继承:继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。

🥡多态

我这里就不多加赘述了。

标答:

  • 多态性:它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。

其实也就是如上面我所举出的例子来说的话,也就是咖啡父类定义了一个抽象方法,他定义的是一个规范,如果子类继承它的话,不同的子类将会表现出不同的行为,那么就是不同的咖啡品种会有不同的名字。这也就是说子类需要重写父类的相关方法进行表现出不同的属性和行为。

  • 多态的三要素
  1. 继承:在多态中必须存在有继承关系的子类和父类。
  2. 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
  3. 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。

当然上面介绍到的重写也只是多态实现的一种方式,多态的实现方式介绍如下:

  • 重写:重写发生在子类与父类之间, 重写方法返回值和形参都不能改变,与方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分。即外壳不变,核心重写!
  • 重载:重载 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。最常用的地方就是构造器的重载。

编写不易,如果你感觉对你有帮助的话,请你三连支持,后面的文章会一点点更新。

在这里插入图片描述

相关文章
|
1月前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
60 2
|
1月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
39 3
|
1月前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
33 2
|
1月前
|
存储 算法 Java
Java Set因其“无重复”特性在集合框架中独树一帜
【10月更文挑战第14天】Java Set因其“无重复”特性在集合框架中独树一帜。本文深入解析Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定的数据结构(哈希表、红黑树)确保元素唯一性,并提供最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的`hashCode()`与`equals()`方法。
31 3
|
1月前
|
安全 Java API
Java 17新特性让你的代码起飞!
【10月更文挑战第4天】自Java 8发布以来,Java语言经历了多次重大更新,每一次都引入了令人兴奋的新特性,极大地提升了开发效率和代码质量。本文将带你从Java 8一路走到Java 17,探索那些能让你的代码起飞的关键特性。
83 1
|
17天前
|
分布式计算 Java API
Java 8引入了流处理和函数式编程两大新特性
Java 8引入了流处理和函数式编程两大新特性。流处理提供了一种声明式的数据处理方式,使代码更简洁易读;函数式编程通过Lambda表达式和函数式接口,简化了代码书写,提高了灵活性。此外,Java 8还引入了Optional类、新的日期时间API等,进一步增强了编程能力。这些新特性使开发者能够编写更高效、更清晰的代码。
28 4
|
1月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
73 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
26天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
15 2
|
1月前
|
存储 Java API
优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。
【10月更文挑战第19天】本文介绍了如何优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。内容包括Map的初始化、使用Stream API处理Map、利用merge方法、使用ComputeIfAbsent和ComputeIfPresent,以及Map的默认方法。这些技巧不仅提高了代码的可读性和维护性,还提升了开发效率。
58 3
|
1月前
|
存储 安全 Java
Java Map新玩法:深入探讨HashMap和TreeMap的高级特性
【10月更文挑战第19天】Java Map新玩法:深入探讨HashMap和TreeMap的高级特性,包括初始容量与加载因子的优化、高效的遍历方法、线程安全性处理以及TreeMap的自然排序、自定义排序、范围查询等功能,助你提升代码性能与灵活性。
24 2
下一篇
无影云桌面