楼上的也没改对,应该是这样的:
class Person
{
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void show(int a)
{
System.out.println(a);
}
}
class Man extends Person
{
String name;
int age;
public Man(String name, int age)
{
super(name, age);//1 super(name,age) 是子类调用了父类有String name和int age的构造函数
}
public void show(int a)
{
super.show(a);//2 子类调用父类的构造方法
}
}
public class PersonTest
{
public static void main(String[] args)
{
Man s = new Man("zhansan",30);
s.show(1);
}
}
楼主所提到的那两个地方是没有错误的。
1、
class Man extends Person
{
String name;
int age;
public Man(String name, int age)
{
super(name, age);//1 super(name,age) 是子类调用了父类有String name和int age的构造函数
}
public void show(int a)
{
super.show(a);//2 子类调用父类的构造方法
}
}
注意看,这个子类既然继承父类,就不用重写父类的成员属性了,也就是说,name,age在父类中有了,子类就不用写了,应该把子类中的name,age属性删掉
然后看下面:
public Man(String name, int age)
{
super(name, age);//1 super(name,age) 是子类调用了父类有String name和int age的构造函数
}
这个是子类的构造方法, super(name, age);这个的意思是继承了父类的具有name,age的构造方法,如果父类中没有不带参数(也就是空)的构造函数,那么就会报错,所以,一般最好把空的构造函数加上去,那么子类所有的super都可以省掉了,加不加都一样,如果把父类的空的构造函数去掉,子类就要加上super。【这里都是说构造函数是否需要加super】
至于show,这个不是构造函数,只是自定义的方法,加super是明确指出要使用父类的方法,然后再继续重写,不加super的话,就是不使用父类的方法,直接重写 |