Java定义
多态的定义:
多态分为编译时多态和运行时多态。
编译时多态:方法的重载
运行时多态:定义的对象引用所指向的具体类型在运行期间才能确定
运行时多态的三个条件:继承、重写、向上转型
运行时多态就是子类继承和对父类方法的重写,在实例化子类对象时,由于父类引用了不同的子类对象,(同个类的多个对象),调用同样的方法,输出不同
运行时多态发生在子类和父类之间,也可以发生在接口和它的实现类之间
而重载是调用了同一个方法名,但是产生了不同的行为,返回了不同的参数
2、继承的定义:
父类(超类),子类(派生类),扩展(extends)
1、通过一个类创建另一个类
2、被创建的类可以对模板类进行扩展,而这种扩展是不用修改原来的类的
继承可以提高代码的复用性,就是子类继承父类的特征和定义,使得子类具有父类的实例域和方法。
3、抽象的定义,抽象和封装的不同点
抽象是指从众多的事务中抽取出具有共同的、本质性的特征作为一个整体,是共同特质的集合形式。
封装是将通过抽象所得到的数据信息和操作进行结合,使其形成一个有机的整体,对内执行操作,对外隐藏细节和数据信息。
抽象是一种思维方式,而封装则是一种基于抽象类的操作方法。
4、方法的重写和方法重载
重写:
1、重写的方法名称、参数列表,必须与原方法相同、返回类型可以相同,也可以是原类型的子类型。
2、重写方法的访问权限不能缩小
3、重写的方法不能比原方法抛出更多异常
4、被重写的方法不能是final类型、不能是private、不能是static类型
5、重写发生在运行时,因为编译期间,编译器没办法确定调用哪个方法
重载:
1、方法名称相同、参数列表不同(个数、类型、排列顺序)、与返回类型无关
2、发生在编译时,因为编译器可以根据参数的类型来选择使用哪个方法
3、重载发生在同一个类
4、重写是在子类和父类之间
5、什么是构造方法,什么是构造方法重载,什么是复制构造方法
Java中的构造函数是为了初始化对象,构造函数名和类名一致,默认的构造函数没有参数,没有返回值,函数体内,没有内容
构造函数的重载和方法的重载类似,可以为构造函数提供多个参数表,java不支持复制构造方法。
6、Java支持多继承么
Java支持单继承,多实现。
一个类只有一个父类,java中的接口支持多继承,即一个子接口可以有多个父接口,接口的作用是用来扩展对象的功能。
7、接口和抽象类的区别是
接口:
1、has -a
2、接口所有方法都是抽象的
3、类可以实现多个接口
4、接口中声明的变量默认final
5、接口中的成员函数默认是public
抽象类:
1、is-a
2、抽象类包含抽象和非抽象方法
3、只能继承一个抽象类
4、抽象类可以包含非final变量
5、抽象类的成员函数没有权限限制
接口、抽象类都不可以被实例化,一个类实现接口要实现接口的所有方法,而抽象类不一定
从设计层面来说:抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。
8、Java虚拟机
java虚拟机(jvm)是可以执行java字节码的虚拟进程,准确的说,java的跨平台指的是java源文件经过javac编译器编译成的二进制.class字节码的跨平台性。各个平台装有不同的jvm,而jvm能将相同的字节码编译成平台相关的机器码,进而执行。
9、JDK和JRE的区别
JDK:java开发工具集,包含了JRE、编译器等。
JRE: java运行环境,包含jvm和需要运行的程序,只有JRE只能进行程序编译,不能进行java程序的开发,安装JDK才能正常进行java程序的开发、编译、运行。
10、机器码和字节码
机器码完全依附硬件而存在,并且不同硬件由于内嵌指令集不同,即时相同的01代码,意思也可能不同。
JAVA跨平台,因为有jvm,它会把字节码翻译成所有机器认识的机器码。
11、static关键字的意思,Java中是否可以覆盖一个private或static的方法
static关键字表明一个成员变量或者成员方法可以在没有所属类的实例变量的情况下被访问。
Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的,static方法跟类的任何实例都不相关。不可以覆盖private方法,因为private修饰的变量和方法只能在当前类中使用。
12、是否可以在static环境中访问非static变量
不可以,因为static环境,当jvm完成类的加载以后就创建好的,这个时候非static变量还未创建出来,因为非static变量需要实例化一个类才能被访问,因此static环境不能访问非static变量。