Java语言拥有三大特性 ,分别是:
1.封装
2.继承
3.多态
1、Java的封装性
什么是封装? 为什么 要使用封装?
案例: 手机打电话 ,只需要拨号码,不需要知道手机的内部结构
打游戏,只需要按键操作,不需要知道游戏的内部代码结构
封装的含义:
为了隐藏对象内部的复杂性, 只对外公开简单用法,从而达到便于使用,
将方法、属性封装到类中,尽量隐藏类的细节,只对外提供访问方法。
封装的好处:
提高代码的可重用性,便于维护 ,拓展;
封装的定义:
将属性和一些方法封装到一个 独立的整体,尽可能的对当前类的内部细节进行隐藏 ,提高代码的可重用性,便于维护 ,拓展;
封装的表现形式:
代码体现在——>属性的私有化、方法的定义、类的定义
2、Java的继承性
继承,顾名思义就是:子承父业
定义一个子类继承一个父类
Java如何 实现继承呢?
继承就是 is a 的关系
Dog is a Animal!
使用 一个关键字 extends
语法结构:
public class Dog extends Animal{
//一个狗的类继承类动物类
这个狗是一个 is a 动物
}
public class Cat extends Animal{
这个猫是一个 is a 动物
}
什么是继承?
继承是面向对象的重要特性之一,是从已有的类派生出新的类, 新的类能吸收,使用已有类的属性和行为(方法)
,子类也可以有一些拓展的新功能和属性 ,从而达到对程序代码量的减少,并提高对程序的延展性和可维护行等…
java中 只支持单继承,但是可以多重继承,即狗类继承于动物类,动物类继承于生物类;
继承中存在就近原则, 如果类的属性和 类的属性名重复 ,他先找 自己有没有这个 变量, 如果有就直接输出, 如果没有就去父类中寻找。
在继承中 有一种现象是方法的重写:
方法重写的定义:
在继承中,不同类, 方法名相同, 参数列表相同 ,返回值相同 ,的方法就是方法的重写参数列表相同指的是 ,参数个数 ,参数顺序和参数 类型都相同。
提供了一个 注解 :
@Override ,如果想检测一个方法是不是重写方法 ,就用这个 注解修饰,把这个注释写在方法前面,如果报错就不是方法重写。
注意:
继承中 一个子类只可以有 一个父类 ;
但一个父类可以有 多个子类;
不支持多继承但是支持多重继承。
super关键字代表父类的引用,对象
super.方法名——调用父类的 方法
super.成员变量——调用 父类的属性
子类继承父类的所有成员变量和成员方法,但不继承父类的构造方法。
在Java中可以通过两种方式获得构造方法:
1、使用系统默认的无参构造方法;
2、显示定义一个或者多个构造方法
一旦显示定义了构造方法,则系统不在提供默认的构造方法。
1:final关键字(掌握)
(1)是最终的意思,可以修饰类,方法,变量。
(2)特点:
A:它修饰的类,不能被继承。
B:它修饰的方法,不能被重写。
C:它修饰的变量,是一个常量。
(3)面试相关:
A:局部变量
a:基本类型 值不能发生改变
b:引用类型 地址值不能发生改变,但是对象的内容是可以改变的
B:初始化时机
a:只能初始化一次。
b:常见的给值
定义的时候。(推荐)
构造方法中。
3、Java的多态性
(1)同一个对象在不同时刻体现出来的不同状态。
孙悟空72变
(2)多态的前提:
A:有继承或者实现关系。
B:有方法重写。
C:有父类或者父接口引用指向子类对象。
多态的分类:
a:具体类多态
class Fu {}
class Zi extends Fu {}
Fu f = new Zi();
b:抽象类多态
abstract class Fu {}
class Zi extends Fu {}
Fu f = new Zi();
c:接口多态
interface Fu {}
class Zi implements Fu {}
Fu f = new Zi();
(3)多态中的成员访问特点
A:成员变量
编译看左边,运行看左边
B:构造方法
子类的构造都会默认访问父类构造
C:成员方法
编译看左边,运行看右边
D:静态方法
编译看左边,运行看左边
为什么?因为成员方法有重写。
(4)多态的好处:
A:提高代码的维护性(继承体现)
B:提高代码的扩展性(多态体现)
(5)多态的弊端:
父不能使用子的特有功能。
现象:
子可以当作父使用,父不能当作子使用。
(6)多态中的转型
A:向上转型
从子到父
B:向下转型
从父到子
动态绑定技术:就是多态
多态这个部分:
方法重写 ,成员属性是不可以重写的
注意:
如果在继承中,我们使用多态的形式来创建对象 ,
这是父类中的成员变量与子类中的成员变量重名了, 那么子类中的成员变量会隐藏
所以在多态情况下调用相同的属性名时 ,只会输出父类的变量
static修饰后 ,结果同上