继承
继承是面向对象最显著的一个特性。子类继承父类的成员属性与成员方法,只能继承一个父类。下面咱来说道说道继承。
先来看看下面代码:
public class Father{ private String name = "父类"; static{ System.out.println("父类静态代码块"); } { System.out.println("父类非静态代码块"); } public Father(){ System.out.println("父类构造方法"); } } public class Child extends Father{ private String name = "子类"; static{ System.out.println("子类静态代码块"); } { System.out.println("子类非静态代码块"); } public Child(){ System.out.println("子类构造方法"); } } public class Main{ public static void main(String[] args){ Child child = new Child(); } }
运行之后会输出什么呢?
其实这也显而易见。静态方法在类实例化之前就会被调用,而且只调用一次!而非静态代码块在成员属性声明与构造函数之间执行,每实例化一次执行一次。
类的加载顺序:先在栈中创建引用,通过反射从代码区中加载类,先是静态存储区开辟内存空间,存储静态成员,然后在堆中开辟存储空间,存储非静态成员。
关于方法重写的小题目可以看这个:http://www.cnblogs.com/jack204/archive/2012/10/29/2745150.html
方法的调用是根据引用的声明类型来加载的,如果引用的实例对象类型是声明类型的子类,则重写的方法将会被子类的方法覆盖。方法重载时,如果改变的参数类型存在继承关系,则调用“血缘关系”最近的方法。
与继承很相似的是实现接口,接口是是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。要实现方法的先调用后声明,可以用接口来实现。
浙公网安备 33010602011771号