class Student{
private String name;
private int classA,classB,classC;
public Student(String n,int a,int b,int c){
name=n;
classA=a;
classB=b;
classC=c;
}
public String getName(){
return name;
}
public int getAverage(){
return (classA+classB+classC)/3;
}
}
class UnderGraduate extends Student{
public UnderGraduate(String n,int a,int b,int c){
super(n,a,b,c);
}
public void isPass(Student a1){
if(a1 instanceof UnderGraduate){
UnderGraduate a=(UnderGraduate)a1;
System.out.println(a.getAverage());
}
if(getAverage()>60)
System.out.println("本科生"+getName()+"的三科平均分为:"+getAverage()+
",可以拿到学士学位。");
else
System.out.println("本科生"+getName()+"的三科平均分为:"+getAverage()+
",不能拿到学士学位。");
}
}
class PostGraduate extends Student{
public PostGraduate(String n,int a,int b,int c){
super(n,a,b,c);
}
public void isPass(Student b1){
if(b1 instanceof PostGraduate){
PostGraduate b=(PostGraduate)b1;
System.out.println(b.getAverage());
}
if(getAverage()>80)
System.out.println("研究生"+getName()+"的三科平均分为:"+getAverage()+
",可以拿到硕士学位。");
else
System.out.println("研究生"+getName()+"的三科平均分为:"+getAverage()+
",不可以拿到硕士学位。");
}
}
public class StudentGradeDemo{
public static void main(String[] args){
StudentGradeDemo t=new StudentGradeDemo();
UnderGraduate a2=new UnderGraduate("张三",80,80,80);
PostGraduate b2=new PostGraduate("李四",90,90,90);
a2.isPass(b2);//这里是什么意思我晕了!!
b2.isPass(a2);//这里是什么意思我晕了!!
}
}
对关键行加了注释,看一下应该能理解。
class Student {
private String name;
private int classA, classB, classC;
public Student(String n, int a, int b, int c) {
name = n;
classA = a;
classB = b;
classC = c;
}
public String getName() {//子类会继承此函数
return name;
}
public int getAverage() {//子类会继承此函数
return (classA + classB + classC) / 3;
}
}
class UnderGraduate extends Student {
public UnderGraduate(String n, int a, int b, int c) {
//调用其类的构造函数,并传入参数: "张三", 80, 80, 80
super(n, a, b, c);
}
public void isPass(Student a1) {
if (a1 instanceof UnderGraduate) { //此条件不满足,if分支不执行
UnderGraduate a = (UnderGraduate) a1;
System.out.println(a.getAverage());
}
if (getAverage() > 60)
//由传入的参数: "张三", 80, 80, 80调用基类getAverage、getName函数得到 结果为:
//本科生张三的三科平均分为:80,可以拿到学士学位。
System.out.println("本科生" + getName() + "的三科平均分为:" + getAverage() + ",可以拿到学士学位。");
else
System.out.println("本科生" + getName() + "的三科平均分为:" + getAverage() + ",不能拿到学士学位。");
}
}
class PostGraduate extends Student {
public PostGraduate(String n, int a, int b, int c) {
//调用其类的构造函数,并传入参数: "李四", 90, 90, 90
super(n, a, b, c);
}
public void isPass(Student b1) {
if (b1 instanceof PostGraduate) { //此条件不满足,if分支不执行
PostGraduate b = (PostGraduate) b1;
System.out.println(b.getAverage());
}
if (getAverage() > 80)
//由传入的参数:"李四", 90, 90, 90调用基类getAverage、getName函数得到 结果为:
//研究生李四的三科平均分为:90,可以拿到硕士学位。
System.out.println("研究生" + getName() + "的三科平均分为:" + getAverage() + ",可以拿到硕士学位。");
else
System.out.println("研究生" + getName() + "的三科平均分为:" + getAverage() + ",不可以拿到硕士学位。");
}
}
public class StudentGradeDemo {
public static void main(String[] args) {
StudentGradeDemo t = new StudentGradeDemo();
UnderGraduate a2 = new UnderGraduate("张三", 80, 80, 80);
PostGraduate b2 = new PostGraduate("李四", 90, 90, 90);
a2.isPass(b2);//调用UnderGraduate.isPass函数
b2.isPass(a2);//调用PostGraduate.isPass函数
}
}
调用哪个,看a2 b2的实际类型(new初始化的类型)。