学习Java继承中的一个典型小案例笔记
最近在学习Java中的继承,做了一个小案例。
class Person
{
private int age;
private String name;
public Person(){};
public Person(String name,int age)
{
this.name = name;
this.age = age;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
class Student extends Person
{
}
class Teacher extends Person
{
}
class ExtendsTest1
{
public static void main(String[] args)
{
Student s1 = new Student();
System.out.println(s1.getAge());
System.out.println(s1.getName());
s1.setAge(12);
s1.setName("张三");
System.out.println(s1.getAge());
System.out.println(s1.getName());
Student s2 = new Student("李四", 20);
}
}
-
这是一个学生和老师的小案例,
Person
中包括了老师和学生的所有信息,所以只需要继承即可。我在Person
中写了两个构造方法,其中一个是无参构造,另一个是带参构造。第一种创建学生对象时,没有任何问题,接着又使用第二种带参构造方法,发现出了问题。才明白,继承不能继承父类的构造方法。第一个能成功,是因为系统会默认给出一个无参构造方法。于是,我在Student
中加入构造方法:class Student extends Person { public Student(){} public Student(String name, int age) { } }
我在这个带参构造方法中不写任何内容仍可以正常运行,因为它满足了
s2
这个对象的构造条件,但是两个参数没有发挥任何作用,于是,继续往里面添加内容:public Student(String name, int age) { super.name = name;//错误 super.age = age; //错误 super.setAge(age); super.setName(name); }
使用
super.变量名
去访问父类中的变量也不可以,因为他们都是私有的,super
只是提供了访问父类成员的方法,它并不能突破权限。这种方法也能起到初始化的作用,但是应该改为:public Student(String name, int age) { super.name = name;//错误 super.age = age; //错误 super(name,age); }
一个案例引发的思考,还是很有用的。