> 技术文档 > 自学党狂喜!用周杰伦的「不能说的秘密」彻底搞懂Java封装继承多态抽象(附大厂真题解析)​

自学党狂喜!用周杰伦的「不能说的秘密」彻底搞懂Java封装继承多态抽象(附大厂真题解析)​


Java三大特性:封装 继承 多态

目录

Java三大特性:封装 继承 多态

封装

封装的概念

为什么要用封装?

封装的语法

封装的意义

封装的注意细节

继承

为什么要用继承?

继承的意义

继承的语法

继承的规则

抽象类

抽象类的理解

抽象类的特点

多态

为什么要用多态?

多态的意义

多态的语法

面试题(八股文)

1.什么是java的多态特性?

2.什么是java的封装特性?

3.为什么java不支持多重继承?

4.接口(Interface)和抽象类(Abstract Class)的区别是什么?


封装

封装的概念

封装是面向对象编程(OOP)的四大基本特性之一(其他三个是继承、多态、抽象),其核心思想是将对象的属性(数据)和行为(方法)捆绑在一起,并对外部隐藏对象的内部实现细节,仅通过公开的接口与外部进行交互。
封装=私有属性+公共方法+数据验证

为什么要用封装?

在我们还没学面向对象时,我们要描述一个人,就要定义非常多的变量去描述它,比如我们现在要描述一个周杰伦,我们可能得这样去描述:

public static void main(String[] args) { introduce(); }/*** 自我介绍的方法*/ public static void introduce(){ String name = \"周杰伦\"; int age = 43; String addr = \"中国台湾\"; String job = \"歌手演员导演\"; System.out.println( \"姓名:\"+name+ \"\\n年龄:\"+age+ \"\\n地址:\"+addr+ \"\\n职业:\"+job ); }

这样有一个很明显的弊端,假如我们要再描述几个人,那我们所要定义的变量就要成倍增长了,太多零散的变量会造成代码难以统一管理与维护,于是聪明的前辈大佬们就打算把这些描述人的特征装在一个整体,共同描述一个人。这个装的过程就是封装了,而这个封装完的整体就是我们的类

封装的语法

/** * 自定义人类 * 名词 类的描述 全部写为属性 */public class Person { //属性 String name; //姓名 int age;//年龄 boolean gender; //性别 booean 1字节  char 2字节 String 字符串 ---》 男 女 String address; //住址 public void Study(){  System.out.println(\"我在学习!!\");  }}

person类是我们自己定义的类用来表示人,而现实生活中我们每个人都是人类里的一个具体例子,比如张三这个人,它就是类的实例,张三有姓名,年龄等属性。那我们怎么创造张三这样一个实例呢,这里就要讲到类的实例化

Person zhangsan = new Person();

现在我们已经创造了一个对象来表示张三,假如张三今年20岁,男,住印度。那我们就要
把这些信息填写到这个对象里去,也就是给对象属性赋值。

 zhangsan.name = \"张三\";  zhangsan.age = 20;  zhangsan.gender = true;  zhangsan.addr = \"印度\";

现在一个张三就被成功创造出来了,到这里封装你已经入门了,但是这样子创造一个张三有没有风险呢?答案是肯定有的。举个例子:

 zhangsan.age = 1000;

1000岁的张三?这是妖怪吧?所以这样子赋值是不安全的
这就要引出我们的访问修饰符了:
访问修饰符一共有4个,分别是 public,private,defult,protect
这是用来控制外部访问类方法或类属性的,具体规则如下:

public:所有人都可以访问

private:只允许本类访问
defult:只有在当前包内可以被访问
protect:同包内可访问,不同包中的子类也可访问

接下来我通过最重要的一个private访问修饰符来展开说明

private的使用

public class person { private String name; private int age; private String sex; private void show() { System.out.println(\"我叫\" + name + \"今年\" + age + \"岁\" + \"性别是\" + sex); } }

一旦你在属性或者方法前面加上private那就表示这是一个私有属性或者私有方法,这样外部类是无法通过对象名.属性来访问私有属性或者对象名.方法来访问私有方法的

虽然我们无法直接通过对象名.属性来访问私有属性或者对象名.方法来访问私有方法
但我们可以拐个弯通过访问公共方法来访问啊,如果我们想得到私有属性age的值,那我们可以通过定义一个 getAge() 来返回age的值,同理如果想设置私有属性age的值那我们就定义一个setAge()来给对象age属性赋值

package com.cjh.pojo; public class person { private String name; private int age; private String sex; public void show() { System.out.println(\"我叫\"