面向对象三大特征--封装,继承,多态

面向对象三大特征–封装,继承,多态

封装

什么是封装

1.生活中: 封装就是将一些部件通过一个外壳包装起来 例如:机箱(cpu,主板,硬盘,内存条,显卡…);
java中: 将事物的特性封装成属性 行为封装成方法 将字段私有化 并提供对外访问的方法
1.程序中一切都是虚幻的:电脑类:伪代码:
class 电脑{
private 主板
public 内存
硬盘
电源
}
2.在Java 中的体现及步骤
2.1把类中的字段私有化; 私有化是为了安全
2.2给每一个字段都提供一组getter setter方法 (方法的规范写法);setXxx
在测试类中尝试创建对象,并通过调用getter setter方法完成 对字段的赋值和取值;
2.3提供一个无参数的构造方法
下面就以一段代码来演示封装:
面向对象三大特征--封装,继承,多态

继承

概念:

什么是继承?
继承就是将事物的共有属性抽取出来放入父类
下面我们通过代码来演示:
// 建一个Person类
class Person{
// Person的属性
String name; // person的名字
int age; // person的年龄
boolean sex; // person分男女
// 人有攻击的行为
void attack(){
}
}
// 建一个Dog类
class Dog{
// Dog的属性
String name; // dog的名字
int age; // dog 的年龄
boolean sex; // dog 分公母
// dog 会咬人
void bark(){
}
}
上面的两个类中 person和dog 都有共同的属性 : 名字 年龄 性别 按照上面那样写 是不是每个类都需要写一次呢 如果还有cat,pig 类 那么每个类中都需要写一遍 是不是感觉比较麻烦 java中就提供了解决这种问题的方法 (继承);person和dog 我们可以看成他们属于一个大类 Animal(动物); 那么我们的代码就可以这样写:
class Animal{
String name;
int age;
boolean sex;
}
class Person extends Animal{
void attack(){
}
}
class Dog extends Animal{
void bark(){
}
}
extends 就是java语言中用于继承的关键字,上面代码的意思就是Person类和Dog类继承了Animal类,Animal(父类)类中的属性name,age,sex被Person类(子类)和Dog类(子类)所继承,当我们调用Person类和Dog类中的name,age,sex属性时,java会在Person类和Dog类中去找,当找不到的时候,就会到Animal父类中去找,按照继承关系一层层向上找,知道找到为止,而Animal没有显示的继承哪个类 那么他就隐式继承Object类 (Object类是所有类的直接父类或间接父类).

继承可以继承父类的哪些东西?

2.1 字段和方法是可以继承的 字段和方法分为私有的(private修饰的)和非私有的 ,私有的字段和方法也是可以继承的 但是要使用需要通 过特殊的方法才能访问.
2.2 构造方法不能够继承
2.3 static 修饰的方法不能被继承

继承的方式

单继承: 一个子类只能继承一个父类 比如class A extends B 不能 class A extends B,C
多重继承: 比如 class B extends A class C extends B

多态

概念

多态:编译和运行时的类型不一致就称为多态 一种事物 多种形态 例如:吃大餐 不同的人对于大餐是不一样的 对于很少吃饱饭的人来说 ,吃一段饱饭就是大餐 对于普通人来说 吃个满汉全席是大餐
代码演示:
class Cat{
void function(){
}
}
// 叮当猫
class DingDangCat{
void function(){
System.out.println(“变魔术”);
}
}
// 招财猫
class ZhaoCaiCat{
void function(){
System.out.println("$100000");
}
}

使用方式

正常调用我们是通过下面的方式
DingDangCat dd = new DingDangCat();
dd.function();
而多态就是通过下面的方式
Cat cat = new DingDangCat();
cat. function(); // 这样写的时候 如果Cat中没有function()方法 那么我们需要在调用之前对cat进行强转 转成DingDangCat类型 编译才不会报错
多态写法编译的时候 我们看左边的类型 运行的时候 我们看右边的类型
多态的好处:屏蔽了不同子类之间实现的差异