首先定义了一个接口outline:
package mypackage;
public interface Outline {
public void task();
}
定义一个Person父类:
package mypackage;
public abstract class Person {
public String name;// 外部类都可访问
protected int age; //子类包可访问,其他类不可访问
public Person(){ //抽象类的构造函数,在生成子类对象时,被子类默认调用
System.out.println("Person的无参构造函数!");
}
public Person(String name,int age){
this.name=name;
this.age=age;
}
public void IDcard(){
System.out.println("Name: "+name+"; " +"Age: "+age);
}
public static void eat(){
System.out.println("进食!");
}
public abstract void work();
}
定义一个Student类和一个Teacher类,并且这个Teacher类还实现了Outline接口
package mypackage;
public class Student extends Person{
public String snum; //默认值为 null
//子类的构造函数,必须调用父类的构造函数,形式为: super(); 编译器可提供
Student(){
super();//生成子类对象时,默认调用父类构造函数
System.out.println("Student的无参构造函数");
}
Student(String name,int age,String snum){ //构造函数重载
super(name,age); // 调用父类方法
this.snum=snum;
}
public void IDcard(){ //重写父类此方法
//super.IDcard();
System.out.println("Name: "+name+"; "+"Age: "+age+"; "+"Snum: "+snum);
}
public void work(){
System.out.println("好好学习!");
}
}
package teacherpackage;
import mypackage.*;
public class Teacher extends Person implements Outline {
private double wage;
public double getwage(){
return wage;
}
public void setwage(double wage){
this.wage=wage;
}
public Teacher(String name,int age){ //构造函数重载
super(name,age); // 调用父类方法
}
public void work(){
System.out.println("好好育人!");
}
public void task(){ //继承并实现接口
System.out.println("勤勤恳恳的工作!");
}
}
最后是一个Test测试类:
package mypackage;
import teacherpackage.Teacher;
public class Test {
public static void main(String[] args){
Student SNo1=new Student("JLei",25,"001");
//Person PNo1=new Person("GOD",0);
SNo1.IDcard();
//PNo1.IDcard();
Student SNo2=new Student();
Person PNo2=SNo2; //向上转型:将子类对象赋值给父类引用
//一个引用能够调用哪些变量和函数,取决于这个引用的类型
PNo2.name="XiaoHong";
PNo2.age=20;
//一个引用调用某个具体方法(继承中可能出现子类复写父类方法),取决于它指向的对象
PNo2.IDcard();// 这里调用了子类的方法
//向下转型:将父类对象赋值给子类引用 是面向对象多态性的体现
Person PNo3=new Student(); //先必须向上转型
Student SNo3=(Student)PNo3;
SNo3.IDcard();
System.out.println("\n");
Teacher TNo1=new Teacher("王老师",40);
TNo1.IDcard();
TNo1.work();
TNo1.eat();
TNo1.task();
}
}