自学党狂喜!用周杰伦的「不能说的秘密」彻底搞懂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(\"我叫\"