除了显式调用父类的构造方法,还有哪些方式可以初始化父类的属性?
除了显式调用父类的构造方法,还可以通过以下两种方式来初始化父类的属性:
在父类中提供一个无参构造方法,然后在子类中调用父类的无参构造方法来初始化父类的属性。
例如:
class Animal { private String name; public Animal() { this.name = "无名氏";} public Animal(String name) { this.name = name;} public String getName() { return name;}}class Dog extends Animal { private int age; public Dog(String name, int age) { super(name); // 调用父类的有参构造方法 this.age = age;} public void printInfo() { System.out.println("名字:" + super.getName() + ",年龄:" + age);}}public class Test { public static void main(String[] args) { Dog dog1 = new Dog("旺财", 3);dog1.printInfo(); Dog dog2 = new Dog();dog2.printInfo(); }}
在这个示例中,Animal类中提供了一个无参构造方法,用于初始化name属性。在Dog类的构造方法中,使用 super 关键字调用父类的有参构造方法来初始化父类的属性name。在main()方法中,创建两个Dog对象并分别调用这些对象的printInfo()方法,输出名字和年龄。其中,第二个Dog对象调用了父类的无参构造方法来初始化name属性。
在父类中提供一个默认值,然后在子类中通过修改父类属性的值来初始化父类的属性。
例如:
class Animal { private String name = "无名氏"; public String getName() { return name;}}class Dog extends Animal { private int age; public Dog(String name, int age) { super(); // 调用父类的无参构造方法 super.name = name; // 修改父类属性的值 this.age = age;} public void printInfo() { System.out.println("名字:" + super.getName() + ",年龄:" + age);}}public class Test { public static void main(String[] args) { Dog dog = new Dog("旺财", 3);dog.printInfo(); }}
在这个示例中,Animal类中定义了一个默认值为"无名氏"的name属性。在Dog类的构造方法中,先调用父类的无参构造方法来初始化父类的属性name,然后修改父类属性的值来达到初始化的目的。在main()方法中,创建一个Dog对象并调用这个对象的printInfo()方法,输出名字和年龄。
需要注意的是,这种方法虽然能够初始化父类的属性,但是修改父类的属性可能会影响到其他子类对象的状态,因此需要谨慎使用。最好的方式还是在子类中显式调用父类的构造方法来初始化父类的属性。
网友评论