Java中的多态
多态的前提必须有继承或接口的实现
-
多态
(1)定义:
1 同一个动作与不同的对象产生不同的行为
2 多态指的是一个对象有多种形态。
(2)多态的体现形式:
1 使用继承:不同的子类重写父类方法后,体现出来的形式不一样;
2 接口的实现:
(3)形成多态的必要条件:
1 继承:存在子类和父类的关系
2 接口实现:定义一个类实现对应的接口
3 重写 :子类重写了父类的方法
4 重载:调用相同的方法名,实现的功能是不一样的
5 子类对象的多态性:父类的引用指向子类的实例
(4)对象的多态性:
1 父类的引用指向子类的实例;
2 在编译期间,调用的是父类的方法;真正执行期间,执行的是子类的方法;
3 编译看左边,运行看右边; -
程序分为两种状态:
1 编译状态:对于多态来说,编译时看左边,类的对象定义的是什么类型就是什么类型,将变量看成是父类类型;
2 运行状态:对于多态来说,运行时看右边,真正执行的对象,也就是子类对象,执行的是子类的重写方法。 -
转型
(1)向下转型:将父类转成子类(强制类型转换)
(2)向上转型:将子类对象交给父类引用(自动转换) -
instanceof运算符:
-
final关键字:代表最终的意思
(1)修饰:
类:这个类不能被继承
方法:代表这个方法是最终的方法,这个方法不能被重写
成员变量:1 成员变量的值不可改变,
2 且不会再有默认值,
3 如果使用final关键字,必须直接对成员变量进行赋值
局部变量:1 如果使用final关键字,局部变量的值不可更改,
2 一般用来修饰一个常量,
3 可以不直接给变量赋初值,用的时候在赋值即可。 -
static关键字:静态
1 修饰成员变量(类变量):
(1)这个变量就不属于对象,而属于类本身;
(2) 只要通过这个类创建的对象,这些对象都可以共享整个属性;
(3) 当其中一个对象对类变量进行更改以后,其他对象的类变量也会更改;
类变量和实例变量(非static的变量,属于对象本身,各个对象都各有一套副本)
(4)类变量随着类的加载而加载
(5)类变量放在方法区的静态域,不是存放在堆里边。
(6)类变量的生命周期比实例变量的生命周期长。
2 static关键字修饰方法(类方法):
(1)修饰方法:这个方法属于类本身,可以通过“类名.方法名()”;
(2)随着类而加载,放在静态域中;
(3)在静态方法里边只能调用静态变量和静态方法 ;相反在普通方法里边可以调用静态方法和静态变量,因为静态方法或静态变量加载时机早于实例变量和实例方法的加载时机
(4)不能使用this和super关键字;
3 static修饰代码块:
代码块的作用完成初始化
对属性赋值:默认初始化;显示的初始化;通过set方法或者构造方法;代码块
(1)非静态代码块:
1 可以给类的属性进行初始化操作,同时可以调用类的方法(静态或者非静态)
2 里面可以有输出语句;
3 每创建完一个对象,非静态代码块就加载一次。
(2)静态代码块:
//前边加一个static就是静态代码块:
eg: static{
system.out.println(“这是一个静态代码块”)
}
(1)里面可以有输出语句;
(2)随着类的加载而加载,只会执行一次;
(3)静态代码的加载时机早于非静态 代码块;
(4)静态代码块里面只能调用类变量和类方法
(5)作用在jdbc(数据库驱动,用户名,密码,数据库的链接地址)