赞
踩
定义一个动物父类:
public class Animal { private String name; private String color; public Animal() { } public Animal(String name, String color) { this.name = name; this.color = color; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setColor(String color) { this.color = color; } public String getColor() { return color; } }
定义一个猫类来继承动物类:
public class Cat extends Animal { private String meow; private String size; public Cat() { } public Cat(String yail, String size) { this.meow = yail; this.size = size; } public Cat(String name, String color, String yail, String size) { super(name, color); //通过super关键字调用父类的构造方法 setName(name); setColor(color); //调用父类的set方法进行修改 this.meow = yail; this.size = size; } public void setMeow(String Meow) { this.meow = Meow; } public String getMeow() { return meow; } public void setSize(String size) { this.size = size; } public String getSize() { return size; } public void action(){ System.out.println("The " + getName()+ " can " + meow + ". It's color is " + getColor() + ". It's " + size) ; } }
定义一个测试类:
public class catTest {
public static void main(String[] args) {
Cat cat = new Cat();
// cat调用父类的set方法进行修改name属性
cat.setName("cat");
cat.setColor("white");
cat.setMeow("miao miao");
cat.setSize("small");
cat.action();
}
}
控制台输出结果为:
子类的构造方法可以调用重载的构造方法或者父类的构造方法。如果子类中没有显式的调用父类的构造方法,编译器就会自动把super() 作为构造方法的第一条语句。例如:
在构造一个类的实例时,将会调用沿着继承链的所有父类的构造方法。构造一个子类的对象时,子类构造方法会在完成自己的任务之前,首先调用它的父类的构造方法。如果此时父类继承自其他类时,那么父类在完成自己的任务之前,调用它自己的父类的构造方法。这个过程会持续到沿着这个继承体系结构的最后一个构造方法被调用为止。以上就是构造方法链。
例如:定义一个Person类
class Person {
public Person() {
System.out.println("(1) Perform Person's tasks");
}
}
定义一个Employee类继承Person类:
class Employee extends Person {
public Employee() {
//此时编译器自动添加了super();
//this调用其他构造方法,放在第一个语句
this("(2) Invoke Employee's overload constructor");
System.out.println("(3) Perform Employee's tasks");
}
public Employee(String s){
System.out.println(s);
}
}
定义一个Faulty类继承Employee类:
public class Faculty extends Employee{
public static void main(String[] args) {
new Faculty(); //调用无参构造方法
}
public Faculty() {
System.out.println("(4) Perform Faculty's tasks");
}
}
在控制台输出的结果是:
注意:要调用父类构造方法就必须使用关键字super,而且这个调用必须是构造方法的第一条语句,在子类中调用父类构造方法的名字会引起一个语法错误。
例如:
在类中只有无参构造时:
public class C {
public static void main(String[] args) {
new B(); //B中调用了A的无参构造
}
}
class A{
public A() {
System.out.println("print a" );
}
}
class B extends A{
// 直接调用了A的无参构造
}
控制台输出:
当A类中没有无参构造时:
调用A中的有参构造,此时关键字super就必不可少了:
控制台输出结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。