如何在子类中初始化父类变量,使子类拥有该变量的专属唯一值
子类初始化父类变量的实现方法
针对你提出的需求,核心是让每个子类在创建时给父类的species变量赋予专属值,下面是几种常用的实现方式:
1. 通过父类构造方法传递值(推荐)
如果父类的species是私有变量(符合封装原则),子类无法直接访问,此时可以通过调用父类的构造方法来初始化该变量:
父类代码:
public class Animal { private String species; // 私有变量,符合封装规范 // 父类构造方法,用于初始化species public Animal(String species) { this.species = species; } // 提供get方法供外部访问(可选) public String getSpecies() { return species; } }
子类Cat代码:
public class Cat extends Animal { // 子类构造方法,调用父类构造器传入专属值"cat" public Cat() { super("cat"); } }
同理,其他子类比如Dog可以在构造方法中调用super("dog"),这样每个子类实例的species就会有唯一专属值。
2. 直接赋值(适用于变量可见性允许的情况)
如果父类的species被声明为protected或public,子类可以直接在构造方法中赋值:
父类代码:
public class Animal { protected String species; // protected修饰,子类可直接访问 }
子类Cat代码:
public class Cat extends Animal { public Cat() { this.species = "cat"; } }
这种方式虽然简单,但破坏了封装性,不推荐在严谨的代码中使用。
3. 静态初始化块(适合静态变量场景)
如果species是父类的静态变量,且每个子类需要固定的专属静态值,可以用静态初始化块:
父类代码:
public class Animal { protected static String species; }
子类Cat代码:
public class Cat extends Animal { static { species = "cat"; } }
注意:静态变量属于类级别,所有子类实例共享该值,仅当你需要类专属而非实例专属的值时使用。
内容的提问来源于stack exchange,提问作者StupiderByTheDay
相关产品推荐
相关产品推荐

