我写的关于继承的一个小练习,不清楚问什么出错,难道instanceof不该这么用吗?

Euray_Kylin 2013-10-14 08:55:52

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()+" ");
p.learn();
}
else if(p instanceof Teacher){
System.out.print(p.name+" "+p.age+" "+p.eat()+" ");
p.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("教课");
}
}

出错的提示


求教哪里用法不对啊
...全文
242 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Euray_Kylin 2013-10-16
  • 打赏
  • 举报
回复
忘记了强制转型,我已经懂了
白开水MD5 2013-10-15
  • 打赏
  • 举报
回复
引用 7 楼 qqZuok 的回复:
我记得好像父类不能转换成子类!
可以的,不过前提是这个父类是由子类转成的父类,比如他这个 Person(父类)是由Student和Teacher(子类)转的,所以可以转成父类
郑涛 2013-10-15
  • 打赏
  • 举报
回复
用eclipse,保存直接编译,出错提示自己看,这个基本语法自己慢慢想吧
bigdata-sb 2013-10-15
  • 打赏
  • 举报
回复
需要把p强制转换成Student或者Teacher类型啊
qqZuok 2013-10-14
  • 打赏
  • 举报
回复
我记得好像父类不能转换成子类!
Jelly_Qin 2013-10-14
  • 打赏
  • 举报
回复
不过我不理解为什么不建立中间变量直接使用p=(Teacher)p和p=(Student)p不行
S117 2013-10-14
  • 打赏
  • 举报
回复
你父类中没有定义那么方法,当然访问不到了,把子类中的方法提到父类中去
wind_elf 2013-10-14
  • 打赏
  • 举报
回复
要向下转型把。((Student)p).learn(); (Teacher) p.teach();
Jelly_Qin 2013-10-14
  • 打赏
  • 举报
回复
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("教课");
    }
}
Euray_Kylin 2013-10-14
  • 打赏
  • 举报
回复

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧