类中域为基本类型时能够自动被初始化为0,对象初始化为null.
编译器并不简单的为每个引用创建对象。如果想要初始化这些引用,可以在代码中的下列位置进行:
1.在定义对象的地方,这意味着他们总是能够在构造器被调用之前被初始化。
2.在类的构造器中
3.在使用对象之前初始化。
为了继承,一般的规则是将所有的数据成员指定为private,所有的方法指定为public
有时在继承中为了使用超类的方法而直接使用方法名会导致无限递归,应该使用super关键字。
Java会自动在导出类的构造器中插入对基类构造器的调用,基类的子对象被包装在导出类的对象内部
如果没有默认的构造器,或者想使用一个带参数的基类构造器,就必须使用super关键字显示的编写调用基类构造器的语句。
代理的使用。将对象申明为private,嵌入到类中,在类外实现了隐藏。
如果在java的基类中拥有某个已被多次重载的方法名称,那么在导出类重新定义该方法名称并不会屏蔽在基类中的任意版本。当你想覆盖基类中的方法时,会有override注解提示。
protected关键字,能够使我们访问继承于它的类访问该关键字修饰的方法,即使即使是在包外。再同一个包内当然可以访问。
继承与组合:
如果必须向上转型,那么继承是必须的,如果不需要,那么考虑是否需要继承。
Final关键字
final数据:
1.一个永不改变的编译时常量
2.一个在运行时被初始化,而你不希望它改变
3.final使引用恒定不变,一旦引用被初始为指向一个对象,就无法再把它改为指向另一个对象。
我们不能认为某数据是final就认为在编译时就可以知道他的值,在运行时使用随机申明的数说明了这一点
使引用申明为final没有基本类型申明为final用处大
Java允许使用空白final,但是编译器会确保在使用前必须初始化。它可以为一个类中的final对象根据对象选择不同而设置不同的初值。
使用空白final,必须在域的定义处或者每个构造器中用表达式对final赋值。
final参数
你可以读他们,但不能修改他们!!!
final方法
原因:方法锁定,不想被继承。
类中的所有private方法都是隐含的申明为final的,所以在继承的时候,你无法覆盖它。
覆盖只有在某方法是基类的接口的一部分时才会出现,如果某方法为private它就不是基类的接口的一部分,它仅仅是隐藏在类中的程序代码。
但如果在导出类中以相同的名称生成一个public,protected或default方法,此时你并没有覆盖该方法,而是生成了一个新方法。
final类
当你将整个类定义为final时,表明你不打算让别人继承这个类。
类是在其如何static关键字被访问时,加载。构造器也是static方法。