Java编程思想(2nd)学习笔记(7)

原创 2003年10月24日 17:48:00

第2章           多态

一.再探向上转型(upcasting

       将某个object reference视为一个“reference to base type“的动作,称为向上转型。

1.  Upcasting后调用某个函数时,如果derived class中覆写了该函数,则会调用derived class中的函数;否则,会调用base class中的函数。如

class First{

    public void prt(){

        System.out.println("First");

    }

}

class Second extends First{

       //a

     public void prt(){

        System.out.println("Second");

    }

}

public class ExplicitStatic{

    public static void main(String[] args){

        First n = new Second();

        n.prt();;

    }

}

结果为Second。如果当Second class中的prt()函数注释掉,将输出First

2.  向上转型后只能调用base class中被derived class覆写的函数。

/*

abstract class First{

    int i = 122;

    public void prt(){

        System.out.println("First.i = " + i);

    }

    public abstract void prt(First f);

}

 

class Second extends First{

     public void prt(){

        System.out.println("Second.i = " + i);

    }

   

    public void prt(First i)

    {

       

    }

   

    public void prt(int i)

    {

       

    }

}

public class ExplicitStatic{

    public static void main(String[] args){

        First n = new Second();

        n.prt(2);;

    }

}

*/

class First{

    public void prt(){

        System.out.println("First");

    }

}

class Second extends First{

       //a

     public void prt(){

        System.out.println("Second");

    }

    public void prt(int i){//a

        System.out.println("Second.i = " + i);

    }

}

public class ExplicitStatic{

    public static void main(String[] args){

        First n = new Second();

        n.prt(3);

    }

}

a)处的函数只是Second class中的函数,所以不能通过n.prt(3)进行调用。

二.Abstract classAbstract methods

1.  如果一个class中存在abstract class,则class也必须被声明为abstract class

2.  abstract class不能被实例化。

3.  如果base class是一个abstract class,那么derived class必须实现base class中所有的abstract methods;否则,derived class也必须被声明为abstract class

三.其它要点

1.  纯粹继承与扩充

纯粹继承:只有base class所建议的函数,才被derived class加以覆写。

扩充:除了覆写base class的函数,还实现了自己的函数

         abstract class First{

    public abstract void f();

    public abstract void g();

}

//纯粹继承

class Second extends First{

     public void f(){}

     public void g(){}

}

//扩充

class Third extends First{

     public void f(){}

     public void g(){}

     public void u(){}//base class不存在的函数

}

2.  向下转型

1)  向下转型时只能调用base class中被覆写过的函数

2)  只有本来就为derived class对象时才能正确向下转弄。

class First{

     public void f(){}

     public void g(){}

}

class Second extends First{

     public void f(){}

     public void g(){}

     public void u(){}

     public void v(){}

}

public class ExplicitStatic{

    public static void main(String[] args){

        First[] x = {new First(), new Second()};

        x[0].f();

        x[1].g();

        //x[1].u();class First中不存在函数u()

        //((Second)x[0]).f();a

        ((Second)x[1]).u();

}

              }

              a)处会抛出ClassCastException异常。

Java编程思想重点笔记(Java开发必看)

Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理解题(比如is-a...
  • lanxuezaipiao
  • lanxuezaipiao
  • 2014年12月09日 13:22
  • 17678

【java】《java编程思想》 读书笔记

之前主要用的C++的比较多,之前花了快2个月的实际认真系统全面的学习了以下java的基础语法,《java编程思想》这本书翻译水平确实不是很好,很多话读着会比较拗口。推荐读之前,先去网上搜索 “java...
  • a2888409
  • a2888409
  • 2015年10月15日 10:07
  • 1907

学完分享:李刚《疯狂JAVA讲义》学习笔记思维导图版

李刚老师的《疯狂JAVA讲义》厚达800多页,如果不做任何笔记并将知识体系化,很难将里面的知识内化成自己的东西。我在三个月的学习过程中,不但认真完成里面的实验,而且细心梳理了知识结构,并通过思维导图软...
  • midong2000
  • midong2000
  • 2013年12月28日 15:58
  • 3003

Java编程思想学习笔记(7)--复用类

这章内容有点多,先上图。。 复用类的三种方式: 组合 继承 代理
  • lzy960918
  • lzy960918
  • 2017年04月25日 13:54
  • 162

《Java编程思想》学习笔记7——Java I/O

Java中使用流来处理程序的输入和输出操作,流是一个抽象的概念,封装了程序数据于输入输出设备交换的底层细节。JavaIO中又将流分为字节流和字符流,字节流主要用于处理诸如图像,音频视频等二进制格式数据...
  • wangjun_818
  • wangjun_818
  • 2017年06月28日 09:58
  • 98

《Java编程思想》学习笔记7——泛型编程基础

一般的类和方法都是针对特定数据类型的,当写一个对多种数据类型都适用的类和方法时就需要使用泛型编程,java的泛型编程类似于C++中的模板,即一种参数化类型的编程方法,具体地说就是将和数据类型相关的信息...
  • Datuqiqi
  • Datuqiqi
  • 2015年06月03日 16:12
  • 457

《Java编程思想》学习笔记7——泛型编程基础

一般的类和方法都是针对特定数据类型的,当写一个对多种数据类型都适用的类和方法时就需要使用泛型编程,java的泛型编程类似于C++中的模板,即一种参数化类型的编程方法,具体地说就是将和数据类型相关的信息...
  • chjttony
  • chjttony
  • 2011年09月17日 16:34
  • 2748

《Java编程思想》学习笔记7——泛型编程基础

一般的类和方法都是针对特定数据类型的,当写一个对多种数据类型都适用的类和方法时就需要使用泛型编程,java的泛型编程类似于C++中的模板,即一种参数化类型的编程方法,具体地说就是将和数据类型相关的信息...
  • z742182637
  • z742182637
  • 2016年01月04日 09:38
  • 192

《Java编程思想》学习笔记2——对象初始化和面向对象特性

1.Java类的初始化顺序: (1).在一个类中,初始化顺序由变量在类中的声明定义顺序决定,成员变量(非set方法和构造方法的初始化)的初始化发生在方法调用之前,包括构造方法。 (2).静...
  • wangjun_818
  • wangjun_818
  • 2017年06月27日 17:19
  • 110

《Java编程思想》学习笔记2——对象初始化和面向对象特性

1.java类的初始化顺序: (1).在一个类中,初始化顺序由变量在类中的声明定义顺序决定,成员变量(非set方法和构造方法的初始化)的初始化发生在方法调用之前,包括构造方法。 (2).静...
  • z742182637
  • z742182637
  • 2016年01月04日 09:27
  • 250
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java编程思想(2nd)学习笔记(7)
举报原因:
原因补充:

(最多只允许输入30个字)