各位大哥哥、大姐姐们
我是新注册的账号没有多少分
忠心的希望各位大哥哥、大姐姐们能够帮帮忙解决一下
小弟感激不进
//这是父类
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()重写方法
}
}
我是新注册的账号没有多少分
忠心的希望各位大哥哥、大姐姐们能够帮帮忙解决一下
小弟感激不进
//这是父类
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()重写方法
}
}
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();
}
}
super.giveLession();
System.out.println("打开eclipse");
}
你不是直接调用的父类的giveLession方法么?
肯定是先执行你覆盖过的方法,但是你覆盖的这个方法里边是调用的父类的giveLession方法当父类的这个方法执行完毕后就会执行你的System.out.println("打开eclipse");
public void giveLession(){
super.giveLession();
System.out.println("打开eclipse");
} 再由于你在main函数里实例化了一个子类
Accpteacher aa=new AccpJavaTeacher(); //这里new出来的是子类,所以调用的就是子类的giveLession()方法
aa.giveLession();所以你会先显示父类的方法属性,再显示子类的方法属性
子类对象的堆内存(注意是事实在在的对象,new出来的在堆中分内存)。这样当你调用业务方法时,就直接调父类的方法(先不管为什么),JVM会自动调用相应
的子类的方法(这才是你需要的方法,也就是new谁调谁)。如果子类
重写的方法越多就越方便,jvm自动调用不需要你操心。明白了?好了,你可以加分了!
Accpteacher aa=new AccpJavaTeacher();
这个表达式分三步:
1.你声明了一个Accpteacher(父)类型的指针或者说引用aa放在栈里。
2.在堆里new出一块空间AccpJavaTeacher(子),同时AccpJavaTeacher(子)这个空间里还包含一个Accpteacher(父)
3.然后aa指向堆里的这个AccpJavaTeacher(子)。
aa只能调用子继承父的东西(可以直白理解为共同拥有的,如属性,方法等),而不能用自己特有的。当你aa.giveLession()调用这个方法是 虚拟机是先去父类里找的,但是执行的时候是子类重写后的。