每个非基本类型对象都有一个toString方法。
创建一个类总是在继承(要么继承其他类,要么继承object)
每个类都可以拥有一个main方法用于测试。
java用super关键字表示父类。调用父类方法:super.function();
当创建一个导出类对象时,该对象包含了一个基类的子对象。该子对象被包装在导出类对象内部。基类在导出类构造器访问它之前就完成初始化。
没有默认构造器或者想用一个带参的基类构造器,就必须用关键字super来调用基类构造器:super(参数)
调用基类构造器必须是导出类构造器要做的第一件事。
向上转型过程中,类接口唯一可能发生的事就是丢失方法。
final数据:1、一个永不改变的编译时常量:必须是基本数据类型,定义时必须赋值; 2、在运行时被初始化的值,且不希望改变。
final用于对象引用时,则该引用无法指向另一个对象。
final static基本数据类型变量全用大写字母命名,且字与字之间用下划线。
java允许生成“空白”final:指被声明为final但又为给定初值的域。在使用前必须初始化,必须在域定义处或者每个构造器中用表达式对final进行赋值。
使用final方法的原因:
1、把方法锁定,以防任何继承类修改它的含义; 2、提高效率。早起java中,讲一个方法指定为final,就是同意编译器将针对该方法的所有调用都转为内嵌调用。(应该就变成了内联函数)对final方法调用时不会以正常方式执行(将参数压栈,跳至方法代码执行,然后跳回并清理栈中的参数,处理返回值),以方法体代码副本来代替方法调用,消除了方法调用的开销。若代码量很大,这样并不提高效率。且这个效果在新的java版本中并不存在。
类中private方法都隐式指定为final(因为无法被调用,所以无法覆盖)。覆盖只有在某方法是基类接口的一部分时才会发生,即必须能将一个对象向上转型为它的基本类型并调用相同的方法。若方法为private,它就不是基类接口的一部分。
final类中的方法隐式加了final修饰符。
类是在其任何static成员被访问时加载,且加载一次就不用在加载了。同一类中,static成员中,main方法是最后加载的。
当要运行一个类时,首先加载基类。加载顺序:基类static,子类static,基类成员初始化,子类成员初始化,基类构造器,子类构造器。