一.继承
特点:
1.具有一定的层次关系,并且具有可传递性
2.子类继承了父类中所有的属性和方法,但是私有属性(private)和构造方法无法被继承
3.子类也可以拥有属于自己的属性和方法
4.在Java中继承只支持单一继承,也就是说一个子类只能有一个父类,但是一个父类可以拥有多个子类
5.判断继承的关系是否成立,可以通过”is-a”是一个
作用:
提高代码的重用性
语法:
[访问修饰符] class 子类 extends 父类{
}
注意:一个源文件中可以包含多个类,但是只能有一个类带访问修饰符,而且类名要和文件名一致
二.super关键字
【注意】当创建有几成关系子类的对象时,JVM会先调用父类中无参数的构造方法,创建父类的对象,然后再调用子类的构造方法创建子类对象
【位置】super关键字只能出现在有继承关系的子类中
作用:super关键字表示对当前父类对象的引用
目的:就是显示的明确的告诉JVM当前属性或方法来自于父类
用法:
调用父类中的普通属性和方法:
super.属性名称;//父类对象.属性
super.方法名称;//父类对象.方法
调用父类中的构造方法:
super关键字以(参数列表)的形式,出现子类构造方法的第一句代码时,就显示的指明了创建 父类对象时,所使用的构造方法
三.Java.lang包
位于Java.lang包中的类,无需导包,可以直接使用。因为Java.lang包中存放都是Java中常用的核心类
【根类、基类、超类都是指的父类】
四.object
Java.lang.object类是所有Java类的父类
如果在创建类时,没有明确指明父类,则默认就继承自object类
五.访问修饰符
Java中的访问修饰符可以用来修饰当前元素的作用范围
private一般用来修饰属性
方法一般用public来修饰
类一般用public或者默认来修饰
六.方法重写
方法重写也是多态的一种表现
【注意】方法重写,只能发生在有继承关系的子类中,是子类重写父类的方法
目的:当从父类中继承过来的方法,满足不了子类的需求是,子类可以在父类方法的基础上进行改造
定义:子类重写父类中的方法,就要和父类中的方法名称,参数列表返回值类型完全一致,而且访问修饰符的范围不能被缩小
七.final关键字
1.final修饰变量等于常量,一旦赋值就永远不能更改
2.final修饰方法中的参数,称为最终参数,在调用该方法时,给参数传递数据,在方法体内也无法再次给参 数重新赋值
3.final修饰类,类不能被继承
4.final修饰的方法,不能被重写
八.向上转型
创建一个子类的对象赋值给父类就是向上转型。(因为父类的范围包括了子类的范围,所以可以直接把一个 子类对象赋值给父类)
例如:
父类 对象=new 子类();
【所谓的动态绑定机制(延迟绑定)就是在程序运行期间,会判断对象的真正的创建者,对象是谁创建的,就调 用哪个类中的方法】
动态绑定机制的条件:
1.继承
2.要有重写
3.要有向上转型
4.要用向上转型的对象调用被子类的重写的方法就会发生动态绑定机制(延迟绑定)
【注意:向上转型的对象可以当做是一个父类对象来用,只有符合动态绑定机制的条件才会发生动态绑定机制】
九.向下转型
向下转型就是把一个父类对象,强制转换成某个子类,需要加强制转换符
注意:
不能直接把一个父类对象强制转换成某个子类,向下转型一定是在向上转型的基础上,做类型的还原
可以通过instanceof关键字判断,某个对象是否属于指定的类
语法:
对象 instanceof 类名/接口名称;
十.static关键字
static关键字可以修饰属性,方法,称为静态属性(类属性)和静态方法(类方法)
Java中存在类属性方法,还存在一种叫做实例属性和实例方法
类属性和类方法都属于类,所以可以通过类名.属性或者类名.方法名称的方式来调用
实例属性和方法是属于对象的,所以在调用属性和方法的时候,都要通过对象来调用
类属性和类方法副本只有一个(就是说只被JVM加载一次),无论创建多少个对象,这些对象在使用类属性和类方法的时候,都是使用的同一个
static修饰变量称为静态变量(类变量),可以通过:
类名.变量名来调用
static修饰方法称为静态方法(类方法),可以通过:
类名.方法名称(参数列表)
注意:
1.在静态方法中只能调用静态方法或者静态属性
2.在非静态方法中可以调用静态方法和静态属性
3.在静态方法中不能使用this和super关键字
static修饰代码块,代码块位于类中,所用方法的外面
静态代码块 作用:
主要是用来给成员静态属性进行初始化的
语法:
static{
}
十一.成员属性(全局变量)默认值
在Java中,所有的成员属性(全局变量)JVM都会根据数据类型附一个默认值
数值类型的默认值都是0;
boolean类型默认值是false;
char类型默认值是a;
所有引用类型的默认值都是null;
十二.抽象类
当一个类中没有足够的信息去描述一个具体的事物时,那么这个类就应定义成抽象类
特点:
1.抽象类不能被实例化
2.抽象类可以拥有构造方法
3.抽象类中可以拥有普通属性和普通方法,也可以拥有静态属 性和静态方法
4.抽象类中可以定义抽象方法,所谓的抽象方法只有方法的声 明没有方法体
语法:
[访问修饰符] abstract 返回值类型 方法名称(参数列表);
注意:
1.抽象类中的抽象方法,由子类来实现
2.如果子类没有全部实现抽象类中的抽象方法,那么子类也要定义成抽象的,由子类的子类实现以此类推
5.一个类如果存在一个抽象方法,那么这个类一定是抽象类,但是抽象类中不一定有抽象方法
6.定义抽象类的语法:
[访问修饰符] abstract class 类名{}
十三.接口
接口就是对外提供了一系列功能(规范)的声明
定义接口的语法:
[访问修饰符] interface 接口名称{
}
特点:
1.接口中没有构造方法,也不能被实例化
2.接口中的所有属性都是静态的常量,而且这些属性默认都是由public static final 来修饰的
3.接口中只能有方法的声明,不能有方法体
4.接口中的方法只能由public来修饰,哪怕没有明确写明访问修饰符,默认也是public
5.接口可以实现多继承,如果一个接口继承了多个接口,接口之间用头号隔开
实现接口可以通过implements来实现 语法:
[访问修饰符] class 类名 implements 接口名称{
}
注意:
1.一个类实现了接口,就要实现接口中所有的方法,否则当前类就要定义成抽象类
2.一个类可以实现多个接口,实现多个接口就要把所有接口中的方法都要实现了,否则也要定义城抽象类。实现多个接口,用逗号隔开
3.实现接口就是一种特殊的继承关系