动态绑定、阻止继承,final类和方法

时间:2022-12-10 13:04:13

1、编译器查看对象的声明类型和方法名。当调用

x.f(param);

且隐式参数x生命为C类对象。这时候可能有多个名字都叫f,但是参数类型不一样的方法。编译器会一一列举C类中名为f的方法和其超类中访问属性为public并且名为f的方法。(超类的私有方法是不能访问的)

进行到这里的时候编译器已经获得了可能被调用的所有的候选方法。

紧接着,编译器就会开始查看调用犯非法提供的参数类型。如果在所有名为f的方法中存在一个与提供的参数类型完全匹配,就选择这个方法。这个过程被称为重载解析。

到这个时候编译器已获得需要调用的方法名字和参数类型。

2、有时候,不希望利用某个类定义子类,不允许扩展的类成为final类。

例如,当想阻止定义Executive类的子类,就可以定义这个类的时候使用final修饰符。

final class Executive extends Manager
{
······

类中所有的特定方法也会被声明为final。如果这样做,子类就不能覆盖这个方法。(final类中所有的方法自动的成为final方法)

例如:

class Exployyee
{
······
public final String getName()
{
return name;
}
······
}

如果将一个类声明为final,只是其中的方法自动成为能够为final,而不包括域。

3、强制类型转换

我们都学过将一个类型强制转换为另一个类型:

double x = 3.405;
int nx = (int)x;

表达式x的值就会被转换为整数类型,舍弃了小数部分。

有时候我们也会需要将某个类的对象引用转换成另外一个类的对象使用,例如:

Manager boss = (Manager) staff[0];

在进行类型转换之前我们可以先查看一下是否能够转换成功,这个过程使用instanceof就可以实现。

if (staff[1] instanceof Manager)
{
boss = (Manager) staff[1];
······
}

类型转换的法则:

只能在继承层次内进行类型转换。

在将超类转换成子类之前,应该使用instanceof进行检查。

动态绑定、阻止继承,final类和方法的更多相关文章

  1. android开发中关于继承activity类中方法的调用

    android开发中关于继承activity类中的函数,不能在其他类中调用其方法. MainActivity.java package com.example.testmain; import and ...

  2. 135-PHP final类和方法都是不可被继承或覆盖的

    <?php final class final_class{ //定义final修饰的类 } class myclass extends final_class{ //试图继承final修饰的类 ...

  3. java基础知识回顾之---java String final类普通方法的应用之&OpenCurlyDoubleQuote;按照字节截取字符串”

    /*需求:在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符.但对应的字节数不同,一个汉字占两个字节.定义一个方法,按照最大的字节数来取子串.如:对于“ab你好”,如果取三 ...

  4. java基础知识回顾之---java String final类普通方法的应用之&OpenCurlyDoubleQuote;模拟字符串Trim方法”

    /* * 4,模拟一个trim功能一致的方法.去除字符串两端的空白  * 思路: * 1,定义两个变量. * 一个变量作为从头开始判断字符串空格的角标.不断++. * 一个变量作为从尾开始判断字符串空 ...

  5. java基础知识回顾之---java String final类普通方法的应用之字符串数组排序

    /* * 1,给定一个字符串数组.按照字典顺序进行从小到大的排序. * {"nba","abc","cba","zz", ...

  6. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

  7. java基础知识回顾之---java String final类普通方法的应用之&OpenCurlyDoubleQuote;两个字符串中最大相同的子串”

    /* * 3,两个字符串中最大相同的子串. * "qwerabcdtyuiop" * "xcabcdvbn" *  * 思路: * 1,既然取得是最大子串,先看 ...

  8. java基础知识回顾之---java String final类普通方法的应用之&OpenCurlyDoubleQuote;子串在整串中出现的次数”

    /* * 2 一个子串在整串中出现的次数. * "loveerlovetyloveuiloveoplove" * 思路: * 1,要找的子串是否存在,如果存在获取其出现的位置.这个 ...

  9. (七)类、超类和子类 ——(多态,动态绑定,final类,类型转换,抽象类)

    java中所有的继承都是公有继承. 在子类中的构造其内可以初始化超类的公有域,但不能初始化超类的私有域. 因此需要在子类构造前的第一行使用super()语句初始化超类的私有域. 如果超类没有不带参数的 ...

随机推荐

  1. iOS设备 屏幕尺寸、操作系统、摄像头像素、发行时间 汇总

    设备 硬件尺寸 软件尺寸 精密程度 操作系统 摄像头像素 发行时间 iPhone 4s 640 x 960 320 x 480 2x iOS 5 800万 2011.10.04 iPhone 5 64 ...

  2. servlet&amp&semi;jsp高级:第三部分

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. C&num;读取文件为byte数组

    private byte[] FileContent(string fileName) { using (FileStream fs = new FileStream(fileName, FileMo ...

  4. makefile、gdb使用记录

    makefile的模板 all: rover server station rover: rover.c tcputil.o gcc rover.c tcputil.o -o rover -lpthr ...

  5. MySQL C&num;教程

    这是关于MySQL数据库的C#教程,包含了对MySQL数据库基本操作: 数据库访问组件MySql Connect/NET MySql Connect/NET是MySQL官方提供给C#的接口,封装的非常 ...

  6. ServletConfig使用

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

  7. 【Java编程】Eclipse快捷键

    Alt+左箭头,右箭头        以在编辑窗口切换标签 Alt+上下箭头,                以自动选择鼠标所在行,并将其上下移动 Ctrl+f6                    ...

  8. Android视图篇之一:Android常见基本布局

    Android中,布局都是直接或间接的继承自ViewGroup类,其中,ViewGroup的直接子类目前有: AbsoluteLayout, AdapterView<T extends Adap ...

  9. springmvc的ModelMap,前台取值

    利用 ${user.id}或者‘${user.id}’都是可以直接获取到的,不过前提是在jsp页面的script脚本中,而在引用的js文件中是不可以使用的,因为${}是jsp的el标签. 利用 ${u ...

  10. github上传流程图记录

    参考文章 http://blog.csdn.net/laozitianxia/article/details/50682100 首先你得先创建仓库 为仓库取一个名字,然后点击创建就会有一个仓库了, g ...