Java中子类构造函数问题——两个问题——50分!!!

来源:百度知道 编辑:UC知道 时间:2024/06/18 05:28:25
一个简单的小代码,用子类建立了两只小狗:
class Animal
{
String name;

public void sound()
{
System.out.println("The animal "+name+" sounded!!");
}

public String getName()
{
return this.name;
}
}

class Dog extends Animal
{

String name="HuaHua";
//解决方法1:用下面的注释替换掉上一行
/*
public Dog()
{
name="HuaHua";
}
*/

public void sound()
{
System.out.println("The dog "+name+" barked!!");
}
//解决方法2:覆盖父类的getName()方法
/*
public String getName()
{
return this.name;
}
*/

}

class T1
{
public static void main(String[] args)
{
Dog adog=new Dog();
adog.sound();

Dog bdog=new Dog();
bdog.name="Qiqi";
bdog.sound();

System.out.println("The Name of the

因为你的子类隐藏了父类的变量,getName仍然是调用父类的变量,所以为null

super()是指父类的默认构造函数,因为你animal类没有定义构造函数,所有有animal()默认构造函数生成

但是因为super()等于什么也没有做,所以,你写了这个等于没写,即使不写,默认也是会调用的。

这些看似纷乱,其实主要是你没有很好的去看关于继承的概念,还是再看看书吧,不妨先停一下做例子

//-------------------------------

子类构造函数来做这个才是正途

重写get方法完全是一叶障目的方法

没有特定需求,不要去隐藏父类变量,带来代码的歧义。