一、概念:
- java的特点(健壮性、跨平台:java程序编译产生的.class文件可以运行在不同的os上,主要是因为JVM、解释性语言:编译后的代码不能之间被机器执行,需要解释器来执行)
- JVM:是java虚拟机,包含在JDK中,对于不同的OS安装不同的版本的JVM
- JRE=JVM+JAVA SE核心类库 称作JAV运行环境。因此,要运行一个项目,只需要安装JRE即可,而一个需要调试代码的程序员需要JVM
- JDK=JRE+JAVA开发工具(编译工具:javac等)
二、继承:
- 子类不能访问父类的私有属性和方法,但是可以通过在弗雷歇一个公共函数,将子类不能访问的方法和属性值传递进去来访问
- 当创建子类对象时,不管子类使用哪个构造器,默认情况下总会调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中调用super去指定使用父类的那个构造器完成对父类的初始化(没有无参构造器,就会默认一个无参构造器;要是有有参构造器,那么就会覆盖无参构造器,需要显示的写出无参构造器)
- super()和this()都必须放在构造器的第一行,因此他俩不允许放在一个构造器中
- 在子类的构造器中之间输入一个函数调用就会先在子类中查找,子类中没有紧接着在父类中查找。但是使用super.cal()就不会在子类中查找,直接在父类中查找,层层递进的查找
- 编译类型为父类,运行类型为子类,那么子类对象不能使用子类的特有方法,因为此时编译器只认为该对象是编译类型的父类对象。
三、重写
- 子类的方法返回类型要是父类相同名称方法的子类,或者和父类保持一致
- 子类方法的返回类型不能缩小父类方法的访问权限(可以扩大,一个方法的默认权限类型是private)
四、重载
- 形参不一样,参数名一样,并且在同一个类中的方法实现的是重载,重载体现了多态(方法的多态)
五、多态
- 方法的多态就是重载;对象的多态涉及到向上、向下转型
- 编译时类型是指等号左边定义时的类型,运行时类型指的是右边实际的类型
六、向上转型
- 向上转型时对象可以调用父类的所有成员,但是不能调用子类的特有成员,因为具体可以调用的方法由编译时的类型决定,但是在运行的时候函数具体实现的效果还是取决于运行时类型所在的类决定,具体决定过程是:如果子类有该方法,就直接使用,没有就逐级在父类中寻找该类调用。
七、向下转型
1、
Animal a = new Cat();
Cat c = (Cat) a;
c.eat();
分析,Animal a = new Cat() 实现a指向cat,之后又让c->被向上转型成的cat,因此合理
八、动态绑定
- 当调用对象方法的时候,该方法会和对象的运行类型绑定
- 当调用对象属性时,没有动态绑定,在哪里声明就在哪里使用
- instanceOf用来判断对象的类型是否是某一类型或者某一类型的子类型(package Primary.DynamicBinding)
九、final关键字
- 使用场景:不希望类被继承;不希望父类某个方法被子类覆盖重写;不希望某个属性的值被修改;不希望某个局部变量被修改
- 使用细节1:final修饰的常量在声明时就需要赋初值:可以在定义时赋值、构造器中赋值、代码块中赋值(代码块就是一个{})
- 使用细节2:如果final修饰的属性时静态的,则初始化测位置只能是:定义时、静态代码块(静态代码块就是static{})
- 使用细节3:final类不能被继承,但是可以被实例化;如果类不是final的,但是含有final方法,该方法虽然不能被重写,但是类可以被继承
- 使用细节4:如果一个类已经是final的类型,那么类中的方法就不用改成final类型
- 使用细节5:final不能修饰构造方法