码迷,mamicode.com
首页 > 编程语言 > 详细

关于JAVA继承、多态、抽象类、接口等性质的学习(2)

时间:2015-10-14 15:46:53      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

关于多态,先看一个简单的例子

class A{
    public void A1(){
        System.out.println("1");
    }
    public void A2(){
        System.out.println("2");
    }
        
}

public class Test2 extends A{
    public Test2() {
        // TODO Auto-generated constructor stub
    }
    public void A1(){
        System.out.println("3");
    }
    public void A2(){
        System.out.println("4");
    }
    
    public static void main(String[] args){
        
        Test2 t1 = new Test2();
        A t2 = new Test2();
        
        t1.A1();
        t1.A2();
        t2.A1();
        t2.A2();
    }

}

从上面例子可以看出,子类重写了基类的A1(),A2()方法,之后分别建立了两个子类对象,将其中一个赋给子类型的引用t1,另外一个赋给基类型的引用t2。接下来对两个引用分别调用A1、A2方法。

3
4
3
4

      上面是输出结果,t1因为是test2类型所以正确的显示出了子类A1,A2方法的结果。但是接下来t2是基类型的,看起来应当输出的是基类A1,A2方法的结果,但是编译器却是输出了子类A1,A2方法的结果。实际上这就是多态性的体现,这里要提到后期绑定这个

概念,后期绑定是由编译器完成的,在编译时,编译器不需要获得任何特殊信息就能进行正确的调用。

简单来说就是:父类型的引用可以指向子类型的对象。

 

     还有就是当用父类的引用调用一个父类没有的方法是,要对其进行强制类型转换,例如

      A t1 = new Test1();

      Test1 t3 = (Test1)t1;

      t3.A3();   // 这里的A3假设为子类特有的方法。

 

    套用java编程思想的话说,多态是一项让程序员“将改变的事物与未变的事物分离开来”的重要技术,我们所做的代码修改,不会对程序中其他不应受到影响的部分产生破坏。

 

   注:静态方法只能继承而不能重写,也就是说子类继承了基类的静态方法后,如果调用的话,要视此时的引用是基类型还是子类型,是什么类型的引用就调用谁的方法。

 

    最后总结一下多态的特性:

   首先得有继承关系存在,接下来基类的方法是要被重写的,而且该方法必须是public,最后子类创建的对象要指向父类的引用。

关于JAVA继承、多态、抽象类、接口等性质的学习(2)

标签:

原文地址:http://www.cnblogs.com/crispker/p/4877372.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!