1.不用修饰符 修饰的方法或类,它们的修饰符是 默认修饰符,即 包访问权限(包内都可以用)(临时记的)
2.
final数据:
对于基本类型,final使数值恒定不变,而对于对象引用,final使引用恒定不变(java里数组也是对象引用)。一旦引用被初始化指向一个对象,就无法再把它指向另一个对象。然而,对象本身还是可以改变的!(只是不能再指向别的,但这个对象本身还是可以变化的)
Java允许生成”空白final”,所谓空白final是指被声明为final但是没有赋初值的域.无论什么情况,java编译器都保证空白final在使用前必须被初始化”. (必须在定义处或构造器里).
final方法:
为了防止继承类修改这个方法的定义(final方法无法被重写/覆盖)
类中所有的private方法都隐式的指定为final的.
覆盖只有在某个方法是基类的接口的一部分才出现,如果某个方法是private的,就不是接口的一部分,就不能被覆盖/重写,子类再写个一样的不能称为覆盖/重写,只是个子类的新方法(相同名称而已)。其实,子类不知道基类的某些方法(private),那么覆盖就无从谈起.
final类:final类无法被继承 .
3.初始化的顺序(得靠刷题)
- 父类--静态变量
- 父类--静态初始化块
- 子类--静态变量
- 子类--静态初始化块
- 父类--变量
- 父类--初始化块
- 父类--构造器
- 子类--变量
- 子类--初始化块
- 子类--构造器
4.多态的作用是消除类型之间的耦合关系
5.动态(也称动态绑定、后期绑定、运行时绑定)
6.java中除了static方法和final方法(private属于final方法)之外,其它方法都是后期绑定
7.java中的方法都是通过动态绑定实现的多态
8.构造器中发生了多态,如果子类覆盖了父类方法,且父类构造器中调用了该方法,会发生多态现象,最终调用子类的该方法.但是此时子类的初始化还没进行,可能导致意想不到的结果.所以尽量不要在构造器中调用其他方法,或者仅仅调用final以及private(private默认final)的方法; 如下代码输出BB
public class test {
class A{
public A()
{
print();
}
void print()
{
System.out.println("A");
}
}
public class B extends A{
public B()
{
print();
}
void print()
{
System.out.println("B");
}
}
public static void main(String[] args) {
test t = new test();
A a = t.new B();
}
}