【第二章:Java核心技术解析】第3节:Java基础 - 必知必会(上)


大家好,很高兴我们可以一起学习交流Java高频面试题。按照前面的专刊大纲,我们从这节开始交流学习Java核心技术。本专刊的Java核心技术解析分为了基础篇,进阶篇和框架篇

本小节是基础篇的第一小节,我们从最基础的Java知识点开始学习。本节涉及到的知识点包括面向对象的三大特性,即封装,继承与多态,并且对常见且容易混淆的重要概念覆盖和重载进行了比较分析等。本小节主要是帮助大家更好的复习与掌握Java面试中的基础类题目,争取在与面试官的热身题目中占据先机,留下好印象。

(1) 面向对象可以解释下吗?都有哪些特性?

答:面向对象是一种思想,可以将复杂问题简单化,让我们从执行者变为了指挥者。面向对象的三大特性为:封装,继承与多态。

  • 封装:将事物封装成一个类,减少耦合,隐藏细节。保留特定的接口与外界联系,当接口内部发生改变时,不会影响外部调用方。
  • 继承:从一个已知的类中派生出一个新的类,新类可以拥有已知类的行为和属性,并且可以通过覆盖/重写来增强已知类的能力。
  • 多态:多态的本质就是一个程序中存在多个同名的不同方法,主要通过三种方式来实现:
    • 通过子类对父类的覆盖来实现
    • 通过在一个类中对方法的重载来实现
    • 通过将子类对象作为父类对象使用来实现

解析:

这算是一个相当基础的问题,面向对象的思想以及其三大特性我们均需要有较好的理解。接下来,我们对三大特性进行一个详细的阐述与解析吧。

关于封装

封装主要是为了增加程序的可读性,解耦合并且隐藏部分实现细节。让我们来看下边的案例,看看该如何实现封装。

案例:

package com.pak1;

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.name = "小明";
        student.age = 16;
        student.printStudentAge();

        Student student2 = new Student();
        student2.name = "小白";
        student2.age = 120;
        student2.printStudentAge();
     }
}

class Student {
    String name;
    int age;

    public void printStudentAge() {
        System.out.println(name + "同学的年龄:" + age);
    }
}

程序输出如下:

图片说明

我们看到小白同学的年龄120,(假设)不符合业务逻辑需要,所以我们需要做一些内部逻辑的处理。所以需要进行代码封装,将内部逻辑进行一个隐藏。

封装之后的代码如下:

package com.pak1;

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("小明");
        student.setAge(16);
        student.printStudentAge();

        Student student2 = new Student();
        student.setName("小白");
        student.setAge(120);
        student2.printStudentAge();
     }
}

class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age < 0 || age > 60)
            throw new RuntimeException("年龄设置不合法");
        this.age = age;
    }

    public void printStudentAge() {
        System.out.println(name + "同学的年龄:" + age);
    }
}

程序输出结果如下:

图片说明

通过将Student这个类的name和age属性私有化,只有通过公共的get/set方法才能进行访问,在get/set方法中我们可以对内部逻辑进行封装处理,外部的调用方不必关心我们的处理逻辑。

关于继承:

我们需要注意Java中不支持多继承,即一个类只可以有一个父类存在。另外Java中的构造函数是不可以继承的,如果构造函数被private修饰,那么就是不明确的构造函数,该类是不可以被其它类继承的,具体原因我们可以先来看下Java中类的初始化顺序

  • 初始化父类中的静态成员变量和静态代码块
  • 初始化子类中的静态成员变量和静态代码块
  • 初始化父类中的普通成员变量和代码块,再执行父类的构造方法
  • 初始化子类中的普通成员变量和代码块,再执行子类的构造方法

如果父类构造函数是的,则初始化子类的时候不可以被执行,所以解释了为什么该类不可以被继承,也就是说其不

在这里需要注意如下面试官的追问问题(高频)。

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Java开发岗高频面试题全解析 文章被收录于专栏

<p> Java开发岗高频面试题全解析,专刊正文共计31节,已经全部更新完毕。专刊分9个模块来对Java岗位面试中的知识点进行解析,包括通用面试技能,Java基础,Java进阶,网络协议,常见框架以及算法,设计模式等。专刊串点成面的解析每个面试题背后的技术原理,由浅入深,循序渐进,力争让大家掌握面试题目的背后的技术原理,摒弃背题模式的陋习。 专刊详细信息,请查阅专刊大纲和开篇词的介绍。 本专刊购买后即可解锁所有章节,故不可以退换哦~ </p> <p> <br /> </p>

全部评论
祖国的花朵,你好,这章节里,子类拥有父类的非private属性和方法这句话不太对吧,子类拥有父类的所有属性和方法吧,只是子类无法直接访问
5 回复 分享
发布于 2020-04-14 18:38
打卡已学习
3 回复 分享
发布于 2019-11-20 18:08
多态这一块儿我觉得理解有问题 多态的本质是对象空间访问权限的控制。 比如Parent p = new Child(); 这是一个child对象实例,但是由于他的声明是Parent 所以他的访问范围就局限在了Parent空间 这也就是多态是多重身份这句话的含义 而造型的本质是多态的不同身份的变化 Child a = new Child(); Parent p = (Parent)a; 向上转型,只是把对象的身份往父类靠而已 不会出问题 再看向下转型 Parent p= new Child(); Child b = (Child)p; p对象本质还是child类型,只是初始身份是Parent,而此时向下转型为Child 对它而言只是身份的转变 而如果 Parent p = new Parent(); Child a = (Child)p; 会抛出类型转化异常 因为p此时本质就是Parent类型 他的身份里面没有Child 因此向下转型失败 身份是多态的一种类比 本质还是对象空间访问权限的控制
1 回复 分享
发布于 2020-11-29 23:32
打卡
1 回复 分享
发布于 2020-06-26 12:11
大家好,希望打卡的同学可以坚持学习,查缺补漏!另外,各位可以随时针对不太清楚的,或者想要了解的,在各个文章下留言。后续我会统一整理,多多完善专栏。加油!
1 回复 分享
发布于 2020-03-08 12:15
我一般都这么记上下转型的 Animal animal = new Animal(); Cat cat = (Cat)animal; Animal dog = new Dog();
1 回复 分享
发布于 2020-03-05 06:56
打卡 第一天
1 回复 分享
发布于 2020-02-29 12:49
第一遍打卡
1 回复 分享
发布于 2020-02-28 19:13
加油!春招的大幕已经拉开啦,希望大家都有所斩获!
1 回复 分享
发布于 2020-02-21 22:29
打卡
1 回复 分享
发布于 2019-11-25 23:33
打卡,希望多更新些javaee的内容
1 回复 分享
发布于 2019-11-21 23:37
我又来了
点赞 回复 分享
发布于 2024-03-31 20:18 浙江
打卡,准备跳槽
点赞 回复 分享
发布于 2022-10-27 08:37 浙江
打卡学习
点赞 回复 分享
发布于 2022-08-20 22:52 福建
滴滴!学生卡~
点赞 回复 分享
发布于 2022-08-10 09:21
我又来打卡了
点赞 回复 分享
发布于 2022-07-20 18:22
不知道多少刷了,大三上
点赞 回复 分享
发布于 2021-11-03 11:18
打卡
点赞 回复 分享
发布于 2021-09-30 19:19
打卡
点赞 回复 分享
发布于 2021-09-24 11:28
打卡
点赞 回复 分享
发布于 2021-08-16 19:44

相关推荐

昨天 12:07
门头沟学院 Java
勇敢牛牛不怕困难
投递OPPO等公司7个岗位
点赞 评论 收藏
分享
06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
05-27 14:57
西北大学 golang
强大的社畜在走神:27届真不用急,可以搞点项目、竞赛再沉淀沉淀,我大二的时候还在天天打游戏呢
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
38
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务