//父类Animal public class Animal { /* private :只允许在本类中进行访问 * public: 允许在任意位置访问 * protected:允许在当前类、同包子类/非子类、跨包子类调用;跨包非子类不允许 * 默认:允许在当前类、同包子类/非子类调用;跨包子类/非子类不允许调用 */ private String name; //昵称(实例变量) protected int month; //月份(实例变量) String species; //品种 //实例变量(默认级别) public int temp=15; //成员变量 private static int st1=22; //静态变量 public static int st2=23; //静态变量 static { System.out.println("我是父类的静态代码块"); } { System.out.println("我是父类的构造代码块"); } //无参构造方法 //父类的构造不允许被继承、不允许被重写,但是会影响子类对象的实例化过程 public Animal(){ month=2; System.out.println("我是父类的无参构造方法"); } //带参构造方法 public Animal(String name,int month) { System.out.println("我是父类的带参构造方法"); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getMonth() { return month; } public void setMonth(int month) { this.month = month; } public String getSpecies() { return species; } public void setSpecies(String species) { this.species = species; } //吃东西 public void eat() { System.out.println(this.getName()+"在吃东西"); } public void eat(String name) { System.out.println(name+"在吃东西"); } public Animal jump() { System.out.println("运动跳跃是一种本能"); return new Animal(); } } //子类Cat public class Cat extends Animal{ private double weight; //体重 public static int st3=44; static { System.out.println("我是子类的静态代码块"); } { System.out.println("我是子类的构造代码块"); } //无参构造方法 public Cat() { System.out.println("我是子类的无参构造方法"); } //带参构造方法 public Cat(String name,int month) { /* 子类构造默认调用父类无参构造方法 * 可以通过 super() 调用父类允许被访问的其他构造方法 * super() 必须放在子类构造方法有效代码 第一行 */ System.out.println("我是子类的带参构造方法"); } public void setWeight(double weight) { this.weight=weight; } public double getWeight() { return weight; } //跑动的方法 public void run() { System.out.println(this.getName()+"是一只"+this.getSpecies()+",它在快乐地奔跑"); } } //测试 public class TestTwo { public static void main(String[] args) { Cat one=new Cat("花花",2); System.out.println(one.temp); } } 测试结果: 我是父类的静态代码块 我是子类的静态代码块 我是父类的构造代码块 我是父类的无参构造方法 我是子类的构造代码块 我是子类的带参构造方法 15
也就是说,子类构造默认调用父类无参构造方法,若希望调用父类带参构造方法时,需要用到super关键字,并将它放在子类带参构造方法有效代码的第一行。
//父类Animal public class Animal { /* private :只允许在本类中进行访问 * public: 允许在任意位置访问 * protected:允许在当前类、同包子类/非子类、跨包子类调用;跨包非子类不允许 * 默认:允许在当前类、同包子类/非子类调用;跨包子类/非子类不允许调用 */ private String name; //昵称(实例变量) protected int month; //月份(实例变量) String species; //品种 //实例变量(默认级别) public int temp=15; //成员变量 private static int st1=22; //静态变量 public static int st2=23; //静态变量 static { System.out.println("我是父类的静态代码块"); } { System.out.println("我是父类的构造代码块"); } //无参构造方法 //父类的构造不允许被继承、不允许被重写,但是会影响子类对象的实例化过程 public Animal(){ month=2; System.out.println("我是父类的无参构造方法"); } //带参构造方法 public Animal(String name,int month) { System.out.println("我是父类的带参构造方法"); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getMonth() { return month; } public void setMonth(int month) { this.month = month; } public String getSpecies() { return species; } public void setSpecies(String species) { this.species = species; } //吃东西 public void eat() { System.out.println(this.getName()+"在吃东西"); } public void eat(String name) { System.out.println(name+"在吃东西"); } public Animal jump() { System.out.println("运动跳跃是一种本能"); return new Animal(); } } //子类Cat public class Cat extends Animal{ private double weight; //体重 public static int st3=44; static { System.out.println("我是子类的静态代码块"); } { System.out.println("我是子类的构造代码块"); } //无参构造方法 public Cat() { System.out.println("我是子类的无参构造方法"); } //带参构造方法 public Cat(String name,int month) { /* 子类构造默认调用父类无参构造方法 * 可以通过 super() 调用父类允许被访问的其他构造方法 * super() 必须放在子类构造方法有效代码 第一行 */ super(name,month); System.out.println("我是子类的带参构造方法"); } public void setWeight(double weight) { this.weight=weight; } public double getWeight() { return weight; } //跑动的方法 public void run() { System.out.println(this.getName()+"是一只"+this.getSpecies()+",它在快乐地奔跑"); } } //测试 public class TestTwo { public static void main(String[] args) { Cat one=new Cat("花花",2); System.out.println(one.temp); } } 测试结果: 我是父类的静态代码块 我是子类的静态代码块 我是父类的构造代码块 我是父类的带参构造方法 我是子类的构造代码块 我是子类的带参构造方法 15