父类代码如下(示例):
public class Parent { private String name; private static String Id; public Parent() { System.out.println("父类无参构造方法执行"); } public Parent(String name) { System.out.println("父类有参构造方法执行"); this.name = name; } //静态代码块 static { System.out.println("父类静态代码块执行"); Id = "1234"; System.out.println("父类的静态变量可以在静态代码块中赋值" + Id); } //实例代码块 { System.out.println("父类实例代码块执行"); this.name = "Parent"; System.out.println("父类的实例变量可以在实例代码块中赋值" + name); } //静态方法 public static void doo() { System.out.println("父类静态方法执行"); } public void doSome() { System.out.println("父类实例方法执行"); } }
子类代码如下(示例):
public class Children extends Parent{ private String name; private static String Id; public Children() { System.out.println("子类无参构造方法执行"); } public Children(String name) { this.name = name; System.out.println("子类有参构造方法执行"); } //子类静态代码块 static { System.out.println("子类静态代码块执行"); Id = "456"; System.out.println("子类的静态变量可以在静态代码块中赋值" + Id); } //子类实例代码块 { System.out.println("子类实例代码块执行"); this.name = "Children"; System.out.println("子类的实例变量可以在实例代码块中赋值" + name); } //子类覆盖父类实例方法 @Override public void doSome() { System.out.println("子类实例方法执行"); } }
测试代码
public class Test { public static void main(String[] args) { Children children = new Children(); children.doSome(); } }
执行结果
父类静态代码块执行 父类的静态变量可以在静态代码块中赋值1234 子类静态代码块执行 子类的静态变量可以在静态代码块中赋值456 父类实例代码块执行 父类的实例变量可以在实例代码块中赋值Parent 父类无参构造方法执行 子类实例代码块执行 子类的实例变量可以在实例代码块中赋值Children 子类无参构造方法执行 子类实例方法执行
创建多个对象时
public class Test { public static void main(String[] args) { Children children = new Children(); children.doSome(); System.out.println("=============="); Children children1 = new Children(); children.doSome(); } }
执行结果
父类静态代码块执行 父类的静态变量可以在静态代码块中赋值1234 子类静态代码块执行 子类的静态变量可以在静态代码块中赋值456 父类实例代码块执行 父类的实例变量可以在实例代码块中赋值Parent 父类无参构造方法执行 子类实例代码块执行 子类的实例变量可以在实例代码块中赋值Children 子类有参构造方法执行 子类实例方法执行 ============== 父类实例代码块执行 父类的实例变量可以在实例代码块中赋值Parent 父类无参构造方法执行 子类实例代码块执行 子类的实例变量可以在实例代码块中赋值Children 子类无参构造方法执行 子类实例方法执行
子类也继承了父类的静态方法
children.doo();//父类静态方法执行
修改doSome方法
public void doSome(String name) { System.out.println("父类实例方法执行"); if("Parent".equals(name)) { doParent(); } else if("Children".equals(name)) { doChildren(); } } public void doChildren() { System.out.println("父类中doChildren方法执行"); } public void doParent() { System.out.println("父类中doParent方法执行"); }
子类覆盖doChildren方法
@Override public void doChildren() { System.out.println("子类doChildren方法执行"); }
创建子类对象,调用doSome方法
Children children = new Children(); children.doSome("Parent");//父类中doParent方法执行 children.doSome("Children");//子类doChildren方法执行
子类对象调用父类中的方法,若子类有覆盖,则执行子类中的方法;若没有,则执行父类中的方法