面试突击:面向对象基础

本文已收录于: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⭐叭!

相关推荐
得不到的更加爱6 分钟前
Java多线程不会?一文解决——
java·开发语言
五敷有你9 分钟前
Go:hello world
开发语言·后端·golang
拔剑纵狂歌27 分钟前
Golang异常处理机制
开发语言·后端·golang·go
缘友一世37 分钟前
Armbian 1panel面板工具箱中FTP服务无法正常启动的解决方法
linux·运维·后端·1panel
ffyyhh99551139 分钟前
java进行音视频的拆分和拼接
java·音视频
weixin_419349791 小时前
flask使用定时任务flask_apscheduler(APScheduler)
后端·python·flask
乐之者v1 小时前
Spring之 IoC、BeanFactory、ApplicationContext
java·后端·spring
DS_Watson1 小时前
字符串和正则表达式踩坑
java·开发语言
Wayfreem1 小时前
Java锁升级:无锁 → 偏向锁 → 轻量级锁 → 重量级锁
java·开发语言
我焦虑的编程日记1 小时前
【Java EE】验证码案例
java·java-ee