我写的关于继承的一个小练习,不清楚问什么出错,难道instanceof不该这么用吗?
求教哪里用法不对啊
[解决办法]
public class ExtendsDemo {
public static void main(String[] args){
Student s = new Student("张三",23);
Teacher t = new Teacher("李四",35);
Print(s);
Print(t);
}
private static void Print(Person p){
if(p instanceof Student){
System.out.print(p.name+" "+p.age+" "+p.eat()+" ");
Student student =(Student) p;
student.learn();
}
else if(p instanceof Teacher){
System.out.print(p.name+" "+p.age+" "+p.eat()+" ");
Teacher teacher=(Teacher) p;
teacher.teach();
}
else{ System.out.println("error");}
}
}
class Person{
public String name;
public int age;
public String eat(){
return "吃饭";
}
}
class Student extends Person{
Student(String name,int age){
this.name = name;
this.age = age;
}
public void learn(){
System.out.println("学习");
}
}
class Teacher extends Person{
Teacher(String name,int age){
this.name = name;
this.age = age;
}
public void teach(){
System.out.println("教课");
}
}
[解决办法]
要向下转型把。((Student)p).learn(); (Teacher) p.teach();
[解决办法]
你父类中没有定义那么方法,当然访问不到了,把子类中的方法提到父类中去
[解决办法]
需要把p强制转换成Student或者Teacher类型啊
[解决办法]
可以的,不过前提是这个父类是由子类转成的父类,比如他这个
Person(父类)是由Student和Teacher(子类)转的,所以可以转成父类