Java基础——多态

Java基础——多态

什么是多态?

从字面的意思上理解,多态就是多种形态。
同一个动作作用于不同的对象产生不同的行为
多态性指的是什么?多态性,可以理解为一个事物的多种表现形态。在Java中有两种体现:
方法的重载(overload)和重写(overwrite)
子类对象的多态性(可以直接应用在抽象类和接口上)
对象的多态性是什么?:一个对象多种形态;在Java中,子类的对象可以替代父类的对象使用
我们在之后的学习中会经常与多态打交道,比如:IO、集合、JDBC等等。

多态性有两种:
1.编译时多态性
对于多个同名方法,如果在编译时能够确定执行同名方法中的哪一个,则称为编译时多态性。

2.运行时多态性
如果在编译时不能确定,只能在运行时才能确定执行多个同名方法中的哪一个,则称为运行时多态性。

方法重写和重载的区别:

方法重写的规则
在继承关系的子类中
重写的方法名、参数、返回值类型必须与父类相同
私有方法不能继承因而也无法重写
Java基础——多态_第1张图片对象转型分为:
1.向上转型
2.向下转型
Java基础——多态_第2张图片在这里插入图片描述在这里插入图片描述instanceof运算符:
该运算符用来判断一个对象是否属于一个类或者实现了一个接口,结果为true或false
在强制类型转换之前通过instanceof运算符检查对象的真实类型,可以避免类型转换异常,从而提高代码健壮性

final关键字:
final关键字:代表最终的意思,

  • 可以修饰什么?
  • 1.修饰类
  • 2.方法
  • 3.成员变量
  • 4.局部变量
  • 修饰类,这个类有什么特点?
  • 这个类不能被继承,但是可以继承别的类
  • 修饰方法,这个方法就是一个最终方法,不能被重写
  • 修饰成员变量,成员变量的值不可改变,
  • 成员变量就没有默认值了,
  • 如果使用final关键字,那么要直接对成员变量进行赋值
  • 修饰局部变量,值不能改变

static关键字:
static静态的,可以修饰属性、方法、代码块
*

  • static 修饰属性(类变量):
  • 1.由类创建的所有对象,都共享这个属性
  • 2.如果其中一个对象对属性值发生了改变,会导致其他对象属性值跟着改变
  • 3.类变量随着类的加载而加载,独一份
  • 4.静态变量可以直接通过“类名.类变量”的方式调用
  • 5.类变量存在静态域中
  • 6.类变量的加载要早于对象
  • static修饰方法(类方法):
  • 1.随着类的加载而加载
  • 2.可以直接通过“类名.方法名”的方式调用
  • 3.内部可以调用静态方法或者是静态属性,不能调用非静态方法和属性,非静态方法可以调用静态变量和静态方法
  • static可以修饰代码块

** 注意:
静态方法中不能使用this、super关键字**

类变量:
如果想让一个类的所有实例共享数据,就用类变量!
由类创建的所有的对象,都共用这一个属性
当其中一个对象对此属性进行修改,会导致其他对象对此属性的一个调用。
类变量随着类的加载而加载的,而且独一份
静态的变量可以直接通过“类.类变量”的形式来调用
类变量的加载是要早于对象。所以当有对象以后,可以“对象.类变量”使用。但是"类.实例变量"是不行的。
类变量存在于静态域中。

类方法:
通常的方法都会涉及到对具体对象的操作。这些方法在调用时,需要隐式的传递对象的引用。没有对象的实例时,可以用类名.方法名()的形式访问static标记的类方法。
1.在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法), 而不能直接访问类中的非静态成员。
2.静态方法不能以任何方式引用this关键字。因为静态方法在使用前不用创建 任何实例对象,当静态方法被调用时,this所引用的对象根本就没有产生。
3.main() 方法是静态的,因此JVM在执行main方法时不创建main方法所在的类的实例对象,因而在main()方法中,我们不能直接访问该类中的非静态成员。
类属性、类方法的作用:
1.随着类的加载而加载,只加载一次
2.类属性作为该类各个对象之间共享的变量。
3.在设计类时,分析哪些类属性不因对象的不同而改变,将这些属性设置为类属性。
4.如果方法与调用者无关,则这样的方法通常被声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用。

静态初始化:
一个类中可以使用不包含在任何方法体中的静态代码块。当类被载入时,静态代码块被执行,且只被执行一次。静态块经常用来进行类属性的初始化。
static块通常用于初始化static(类)属性

你可能感兴趣的:(多态,java,类)