面试突击:面向对象基础

本文已收录于:https://github.com/danmuking/all-in-one(持续更新)

面向对象三大特征

封装

封装是指把一个对象的状态信息(也就是属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息 . 但是可以提供一些可以被外界访问的方法来操作属性. 就好像我们看不见电视内部的零件细节(属性),但是可以通过遥控器来控制电视机(方法). 如果属性不想被外界访问,我们大可不必提供方法给外界访问. 但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了. 就好像如果没有遥控器,那么我们就无法操作电视机,电视就变成了一块废铁.

下面给出了一个简单的代码示例:

java 复制代码
public class People {
    private int age;//id属性私有化
    private String name;//name属性私有化

    //获取age的方法
    public int getAge() {
        return age;
    }

    //设置age的方法
    public void setAge(int id) {
        this.age = age;
    }

    //获取name的方法
    public String getName() {
        return name;
    }

    //设置name的方法
    public void setName(String name) {
        this.name = name;
    }
}

在上面的代码中,agename就是对象的属性并且被private修饰, 这意味这这些属性无法被外部直接访问. 但是可以通过类提供的方法, 例如getxxx()setxxx()方法来间接访问对应的属性.

继承

即使是不同类型的对象, 它们相互之间也经常有一定的共同点. 例如, 小明同学、小红同学、小李同学, 都具有学生的特性(班级、学号等). 同时, 不过不同的对象也可能具有自己独立的特性. 例如小明是一个高中生, 小红有画画的技能等等. **继承是使用已存在的类的定义为基础来构建新类的技术, 新类的定义可以增加新的数据或新的功能, **也可以用父类的功能, 但不能选择性地继承父类. 通过使用继承, 可以快速地创建新的类, 可以提高代码的重用, 程序的可维护性, 节省大量创建新类的时间, 提高我们的开发效率.
关于继承如下 3 点请记住:

  1. 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有.
  2. 子类可以拥有自己属性和方法,即子类可以对父类进行扩展.
  3. 子类可以用自己的方式实现父类的方法.

继承一般代表一种is-a的所属关系, 父类和子类之间通常被认为具有强关联, 因此在使用继承是需要慎重.

多态

多态, 顾名思义, 表示一个对象具有多种的状态,具体表现为**父类的引用可以指向不同子类的实例. **
多态的特点:

  • 对象类型和引用类型之间具有继承(类)/实现(接口)的关系;
  • 引用类型变量发出的方法调用的到底是哪个类中的方法, 必须在程序运行期间才能确定;
  • 多态不能调用"只在子类存在但在父类不存在"的方法;
  • 如果子类重写了父类的方法, 真正执行的是子类覆盖的方法, 如果子类没有覆盖父类的方法, 执行的是父类的方法.

这里要写段代码的例子

在 Java 中, 多态的实现通常会涉及到接口和继承, 然而这两种不同的实现方式分别有不同的特点, 细节部分可以看看这里面相对象面试题详解, 大家在面试中如果说到面相对象的特征可以结合上这道题进行一定的拓展.

点关注,不迷路

好了,以上就是这篇文章的全部内容了,如果你能看到这里,非常感谢你的支持!

如果你觉得这篇文章写的还不错, 求点赞 👍 求关注 ❤️ 求分享 👥 对暖男我来说真的 非常有用!!!

白嫖不好,创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

如果本篇博客有任何错误,请批评指教,不胜感激 !
最后推荐我的IM项目DiTinghttps://github.com/danmuking/DiTing-Go),致力于成为一个初学者友好、易于上手的 IM 解决方案,希望能给你的学习、面试带来一点帮助,如果人才你喜欢,给个Star⭐叭!

相关推荐
Themberfue1 分钟前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
时差95316 分钟前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式18 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
晨曦_子画23 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
假装我不帅44 分钟前
asp.net framework从webform开始创建mvc项目
后端·asp.net·mvc
南宫生1 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
神仙别闹1 小时前
基于ASP.NET+SQL Server实现简单小说网站(包括PC版本和移动版本)
后端·asp.net
Heavydrink1 小时前
HTTP动词与状态码
java
ktkiko111 小时前
Java中的远程方法调用——RPC详解
java·开发语言·rpc
计算机-秋大田1 小时前
基于Spring Boot的船舶监造系统的设计与实现,LW+源码+讲解
java·论文阅读·spring boot·后端·vue