多态
概念:就是对象的多种表现形式(多种表现形态)
父类引用指向子类对象
子类和父类关系上,子类继承父类,子类就是父类的一种表现形态
方法的重载和重写也是多态的一种(相同方法名的多种形态)
重载:一个类中方法的多态性体现
重写:子父类中方法的多态性体现
转换:
向上转型:将子类实例变为父类实例
格式: 父类 父类对象 = 子类实例;
向下转型:将父类实例变为子类
格式: 子类 子类对象 = (子类)父类实例;
instanceof
判断判断传入的对象是此类型的哪种形态(哪个子类的对象)
格式: if(p instanceof Student){}
if(传入的对象 instanceof 子类的对象){}
Object类
Object类是所有类的父类(基类),如果一个类没有明确的继承某一个具体的类,则将默认继承Object类
使用Object可以接受任意的引用数据类型
成员内部类
在JAVA中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。
特点:成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)
注意:当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员,如果要访问外部类的同名成员,需要以下面的形式进行访问:
外部类.this.成员变量
外部类.this.成员变量
局部内部类
定义在一个方法和一个作用域里面中的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内(不用权限修饰符和静态)
匿名内部类
匿名内部类没有名字,创建格式:
new 父类构造器(参数列表)| 实现接口(){
//匿名内部类的类体部分
}
注意:使用匿名内部类必须继承一个类或者实现一个接口,但不可两者皆得。
匿名内部类不能定义构造函数的。
匿名内部类中不存在任何的静态成员和静态方法
匿名内部类为局部内部类,所有局部内部类的所有限制同样对匿名内部类生效
匿名内部类和局部内部类只能访问final型的局部变量
静态内部类
定义在另一个类里面的类,在类的前面多了一个关键字static
静态不能操作非静态。
包装类
八种基本数据类型并不是引用数据类型,所以引入了基本数据类型的包装类。
基本数据类型 | 包装类 |
---|---|
int | Integer |
char | Character |
float | Float |
double | Double |
boolean | Boolean |
byte | Byte |
short | Short |
long | Long |
以上包装类分为两种类型:
Number:Integer、Short、Long、Float、Double、Byte都是Number的子类表示是一个数字
Object:Character、Boolean都是Object的直接子类。
装箱和拆箱
Integer x = 100; //自动装箱
int y = x; //自动拆箱
int x = Integer.parseInt(text); //将text从String类型转成int类型
可变参数
语法:
返回值类型 方法名称(数据类型…参数名称){
//参数在方法内部,以数组的形式来接收
}
注意:可变参数只能在参数列表(加粗部分)的最后
递归
在方法的定义中使用方法自身