使用继承学生老师案例前后对比
/*
使用继承前的学生和老师案例
属性:姓名,年龄
行为:吃饭
老师有特有的方法:讲课
学生有特有的方法:学习
*/
- 没用用继承的代码
public class Text_qian {
public static void main(String[] args) {
Student s1 = new Student ( );
s1.setName ("张三");
s1.setAge (21);
System.out.println (s1.getName ( ) + "..." + s1.getAge ( ));
s1.eat ( );
s1.study ( );
System.out.println ("------------------------");
Student s2 = new Student ("李四" , 24);
System.out.println (s2.getName ( ) + "..." + s2.getAge ( ));
s2.eat ( );
s2.study ( );
System.out.println ("------------------------");
Teacher t = new Teacher ("李老师" , 35);
System.out.println (t.getName ( ) + "..." + t.getAge ( ));
t.eat ( );
t.teach ( );
}
}
/*
* 使用继承前的学生和老师案例
* 属性:姓名,年龄
* 行为:吃饭
* 老师有特有的方法:讲课
* 学生有特有的方法:学习
*/
class Student {
private String name; //年龄
private int age; //姓名
public Student() { //空参构造
}
public Student(String name , int age) { //有参构造
this.name = name;
this.age = age;
}
public void setName(String name) { //设置姓名
this.name = name;
}
public String getName() { //获取姓名
return name;
}
public void setAge(int age) { //设置姓名
this.age = age;
}
public int getAge() { //获取姓名
return age;
}
public void eat() {
System.out.println (getName ( ) + "吃饭"); //吃饭 //name私有的,不可以直接调用,用getName()
}
public void study() {
System.out.println (getName ( ) + "学习"); //学习
}
}
class Teacher {
private String name; //年龄
private int age; //姓名
public void Teacher() { //空参构造
}
public Teacher(String name , int age) { //有参构造
this.name = name;
this.age = age;
}
public void setName(String name) { //设置姓名
this.name = name;
}
public String getName() { //获取姓名
return name;
}
public void setAge(int age) { //设置姓名
this.age = age;
}
public int getAge() { //获取姓名
return age;
}
public void eat() {
System.out.println (getName ( ) + "吃饭");
}
public void teach() {
System.out.println (getName ( ) + "讲课");
}
}
结果
张三...21
张三吃饭
张三学习
------------------------
李四...24
李四吃饭
李四学习
------------------------
李老师...35
李老师吃饭
李老师讲课
缺点:这样写代码复用性太差了。
- 使用继承后的学生和老师案例代码
public class Text_hou {
public static void main(String[] args) {
Student2 s1 = new Student2 ( );
s1.setName ("张三");
s1.setAge (21);
System.out.println (s1.getName ( ) + "..." + s1.getAge ( ));
s1.eat ( );
s1.study ( );
System.out.println ("------------------------");
Student2 s3 = new Student2 ("李四" , 24);
System.out.println (s3.getName ( ) + "..." + s3.getAge ( ));
s3.eat ( );
s3.study ( );
System.out.println ("------------------------");
Teacher2 t = new Teacher2 ("李老师" , 35);
System.out.println (t.getName ( ) + "..." + t.getAge ( ));
t.eat ( );
t.teach ( );
}
}
class Person { //父类
private String name; //姓名
private int age; //年龄
public Person() {
}
public Person(String name , int age) { //有参构造
this.name = name;
this.age = age;
}
public void setName(String name) { //设置姓名
this.name = name;
}
public String getName() { //获取姓名
return name;
}
public void setAge(int age) { //设置姓名
this.age = age;
}
public int getAge() { //获取姓名
return age;
}
public void eat() { //吃饭
System.out.println (name + "吃饭");
}
}
class Student2 extends Person { //学生子类
public Student2() { //空参构造
}
public Student2(String name , int age) {
super (name , age); //super继承父类的方法
}
public void study() {
System.out.println (this.getName ( ) + "学习"); // //name私有的,不可以直接调用,用this.getName()或者getName()一样结果
}
}
class Teacher2 extends Person { //学生子类
public Teacher2() { //空参构造
}
public Teacher2(String name , int age) { //有参构造
super (name , age);
}
public void teach() {
System.out.println (this.getName ( ) + "讲课");
}
}
结果同上
优点:增强了代码的复用性,即使再写一个工人类直接用super()调用父类姓名年龄即可,不需要重复写setXxx(),getXxx()方法