各位大哥哥、大姐姐们
我是新注册的账号没有多少分
忠心的希望各位大哥哥、大姐姐们能够帮帮忙解决一下
小弟感激不进
//这是父类
public class Accpteacher {
private String name;
private String school;
public void inroduction(){
System.out.println("我是" +school+"的"+name);
}
public void giveLession(){
System.out.println("习题讲解");
System.out.println("理论知识回顾");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
}
//子类加主函数
public class AccpJavaTeacher extends Accpteacher {
public void giveLession(){
super.giveLession();
System.out.println("打开eclipse");
}
public void give(){
System.out.println("我是123");
}
public static void main(String[]args){
AccpJavaTeacher teacher=new AccpJavaTeacher();
teacher.giveLession();  //这里是调用子类的方法
Accpteacher aa=new AccpJavaTeacher();
aa.giveLession();//重点在这里 
                            这里引用的是子类对象 可以调用子类的重写方法
                            但是联想出来显示的是父类(Accpteacher)的giveLession()方法
                            输出的是子类(AccpJavaTeacher)的giveLession()重写方法       
}
}

解决方案 »

  1.   

    只要记住一句话就可以了。new出来的是哪个对象,就调用哪个对象的方法。好比说儿子继承了老爸某些特点,但是现在特点属于儿子。
      

  2.   

    楼上是ACCP的学生吧?多看看书。
      

  3.   

     class Accpteacher {    //只能有一个public  class
    private String name; 
    private String school; 
    public void inroduction(){ 
    System.out.println("我是" +school+"的"+name); 

    public void giveLession(){ 
    System.out.println("习题讲解"); 
    System.out.println("理论知识回顾"); 

    public String getName() { 
    return name; 

    public void setName(String name) { 
    this.name = name; 

    public String getSchool() { 
    return school; 

    public void setSchool(String school) { 
    this.school = school; 


    public class AccpJavaTeacher extends Accpteacher { 
    public void giveLession(){ 
    super.giveLession();   
    System.out.println("打开eclipse"); 

    public void give(){ 
    System.out.println("我是123"); 

    public static void main(String[]args){ AccpJavaTeacher teacher=new AccpJavaTeacher(); 
    teacher.giveLession();  
    Accpteacher aa=new AccpJavaTeacher(); //这里new出来的是子类,所以调用的就是子类的giveLession()方法
    aa.giveLession();

    }
      

  4.   

    public void giveLession(){ 
    super.giveLession(); 
    System.out.println("打开eclipse"); 

    你不是直接调用的父类的giveLession方法么?
    肯定是先执行你覆盖过的方法,但是你覆盖的这个方法里边是调用的父类的giveLession方法当父类的这个方法执行完毕后就会执行你的System.out.println("打开eclipse"); 
      

  5.   

    多态嘛,你new了子类的对象,就调用的子类的方法
      

  6.   

    由于你在子类方法中调用了父类的方法public class AccpJavaTeacher extends Accpteacher { 
    public void giveLession(){ 
    super.giveLession(); 
    System.out.println("打开eclipse"); 
    } 再由于你在main函数里实例化了一个子类
    Accpteacher aa=new AccpJavaTeacher(); //这里new出来的是子类,所以调用的就是子类的giveLession()方法
    aa.giveLession();所以你会先显示父类的方法属性,再显示子类的方法属性
      

  7.   

    java动态多态性的一种表现,也叫动态绑定,池绑定。也就是父类对象的引用(注意是引用,在栈中分内存)指向
    子类对象的堆内存(注意是事实在在的对象,new出来的在堆中分内存)。这样当你调用业务方法时,就直接调父类的方法(先不管为什么),JVM会自动调用相应
    的子类的方法(这才是你需要的方法,也就是new谁调谁)。如果子类
    重写的方法越多就越方便,jvm自动调用不需要你操心。明白了?好了,你可以加分了!
      

  8.   

      父类                     子类
    Accpteacher aa=new AccpJavaTeacher(); 
     
     
    这个表达式分三步:
    1.你声明了一个Accpteacher(父)类型的指针或者说引用aa放在栈里。
    2.在堆里new出一块空间AccpJavaTeacher(子),同时AccpJavaTeacher(子)这个空间里还包含一个Accpteacher(父)
    3.然后aa指向堆里的这个AccpJavaTeacher(子)。
      
    aa只能调用子继承父的东西(可以直白理解为共同拥有的,如属性,方法等),而不能用自己特有的。当你aa.giveLession()调用这个方法是    虚拟机是先去父类里找的,但是执行的时候是子类重写后的。