学习笔记-观光篇(继承与多态)

来源:互联网 发布:室内定位算法研究 编辑:程序博客网 时间:2024/06/05 00:11

 今天在论坛上看了一个java的小程序,感觉跟经典,就记录了下来,希望对朋友们有多帮助

代码原文:

class Base{
   
int i = 99;
    Base(){
        amethod();
    }
   
public void amethod(){
        System.out.println(
"Base.amethod()");
    }
}

public class Derived extends Base{
   
int i = -1;

   
public void amethod(){
        System.out.println(
"Derived.amethod()");
    }
   
   
public static void main(String args[]){
        Base b
= new Derived();
        System.out.println(b.i);
        b.amethod();
    }
}
运行结果:

Derived.amethod()
99
Derived.amethod()

我对这段代码进行了调试,具体理解如下(只是自己的见解,如有不对,请朋友们指教了)

  1. Base b=new Derived(); 是用父类类型指向子类,new了一个子类的对象,创建对象的同时,调用了默认子类无参构造函数,子类构造函数调用父类无参构造函数,由于子类重写了amethod();(多态),所以调用了子类的amethod()方法输出Derived。amethod();(注意的是,b只能调用自身的方法,不能调用子类独有的方法)
  2. 方法存在多态性 ,属性没有多态性,System.out.println(b.i);,这里看b的类型,b是什么类型就调用谁的属性,输出99。(这里朋友们可以看看有关于动态关联的知识)
  3. b.amethod();这句代码主要看new出来的是谁,就掉用谁的方法(多态)。(需要注意的是由于是继承关系,有时子类中会有一些自身独有的方法,b不能掉用)。