java中所有的继承都是公有继承。

在子类中的构造其内可以初始化超类的公有域,但不能初始化超类的私有域。

因此需要在子类构造前的第一行使用super()语句初始化超类的私有域。

如果超类没有不带参数的构造器,而子类没有显式的调用超类的其他构造器,则会出现编译错误。因为编译器无法调用超类的默认构造器。

多态

A为超类,B为子类。则A的变量既可以引用A类的对象,也可以引用B类的对象。

动态绑定

当调用x.f(param)时,若x为C类的对象。

一:编译器列举C类中所有的名为f的方法和其超类中访问属性为public名为f的方法。

二:根据参数类型查找匹配的参数对应的方法,此时获的需要调用的方法和参数类型

三:如果是private方法,static方法,final方法,则编译器可以确定调用的时具体哪一个,这时称为静态绑定。与此对应的是,调用的方法依赖于调用对象的实际类型,并且在运行时动态绑定。

比如:b.get(),如果b是A类型,则调用A的方法,如果b是B类型,则调用B的方法

四:程序运行时,并且采用动态绑定调用方法时,虚拟机调用与x所引用对象的实际类型最合适的方法。

比如:b.get(),如果B类没有该方法,则去B的超类查找。

注意:如果B类有一个private的get()方法,尽管b.get()不能调用这个私有的get()方法,也不会取超类寻找。这是因为超类中的方法不能被子类的private方法覆盖,所以子类有一个private的get()方法,说明超类一定没有这个方法。

因为Object有一个toString方法,因此任何类内都不能有private的toString()方法。

阻止继承

final修饰的类不能有子类,因而不能有方法被覆盖,所以其方法也都是final的。

final修饰的方法不能被覆盖。

强制类型转换

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

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

抽象类

抽象类不能被实例化。

可以定义一个抽象类变量,它只能引用非抽象子类的对象。

抽象类可以包含抽象方法,具体方法和具体数据,其中抽象方法的实现在子类中。

如果子类实现了全部抽象方法,则子类便不是抽象的了。反之,子类也必须标记为抽象的。

受保护访问

private:仅对本类可见

public:对所有类可见

protected:对本包和子类可见

无:对本包可见

(七)类、超类和子类 ——(多态,动态绑定,final类,类型转换,抽象类)的更多相关文章

  1. 编写Java程序,创建一个数学工具类,将该类设计为final类,Final 修饰符的使用。

    返回本章节 返回作业目录 需求说明: 创建一个数学工具类. 将该类设计为final类. 将该类的构造方法的访问权限定义为私有,以防止外界实例化该类. 在该类定义静态double类型常量π,其值为3.1 ...

  2. Python类总结-继承-子类和父类,新式类和经典类

    子类和父类 class Father(object): #子类在使用super调用父类时,Father后面要加object --新式类 def __init__(self): self.Fname = ...

  3. Java final类&所有构造方法均为private的类(类型说明符&访问控制符)

    1. final是类型说明符,表示关闭继承,即final类不能有子类: 但final类可能可以在类外创建对象(即final类的构造方法可以不是private型): 在同一包中时,可以在任何另外一个类中 ...

  4. Java不可变类与final类

    概念 Java的不可变类是指八个基础类型的包装类和String,他们的数据成员是不可变的.使用加法等操作时,其实是创建了一个新的对象. Java的final类是对类用关键字final进行修饰,说明该类 ...

  5. Core Java (十一) Java 继承,类,超类和子类

    Core Java (十一) Java 继承,类,超类和子类 标签: javaJavaJAVA 2013-01-22 17:08 1274人阅读 评论(0) 收藏 举报  分类: java(58) 读 ...

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

    1.编译器查看对象的声明类型和方法名.当调用 x.f(param); 且隐式参数x生命为C类对象.这时候可能有多个名字都叫f,但是参数类型不一样的方法.编译器会一一列举C类中名为f的方法和其超类中访问 ...

  7. Java核心技术第五章——1.类、超类、子类(2)

    继上一篇Java核心技术第五章——1.类.超类.子类(1) 6.重载解析 假如调用ClassName.Method(args) 1.编译器列出类ClassName所有名为Method的方法. 2.编译 ...

  8. Java核心技术第五章——1.类、超类、子类(1)

    1.定义子类: 关键字extends表明正在构造的新类派生与一个已存在的类.已存在的类称为超类.基类或父类:新类称为子类.派生类或孩子类.超类和子类是Java程序员最常用的两个术语(emmm~~我觉得 ...

  9. C++ 基类指针,子类指针,多态

    基类指针和子类指针之间相互赋值(1)将子类指针赋值给基类指针时,不需要进行强制类型转换,C++编译器将自动进行类型转换.因为子类对象也是一个基类对象. (2)将基类指针赋值给子类指针时,需要进行强制类 ...

随机推荐

  1. HTML5开篇定义(更新中)

    以下介绍的两种属性是为后面的属性支持左铺垫,大概一看就OK了. 通用属性 id 用于为HTML元素指定唯一标识 style 用于为HTML元素指定CSS指定样式 class 用于匹配CSS样式的cla ...

  2. HTML5页面CSS Reset

    /*------------------*//*reset*//*------------------*/* {box-sizing: border-box; -webkit-tap-highligh ...

  3. Git-2.15.1.2-64-bit安装

    方法/步骤    我们在百度搜索git,然后在git的官网上找到git的下载页面,如下图所示.在首页在Downloads处选择下载Windows版本,当然您可以根据需求下载其他版本的安装文件.     ...

  4. 「PHP」抽象工厂模式

    引言   所属:创建型模式,常用设计模式之一 参考资料: <大话设计模式>程杰   模式概述    官方定义:抽象工厂模式(Abstract Factory),提供一个创建一系列相关或互相 ...

  5. MPP调研

    一.MMP数据库 MPP是massively parallel processing,一般指使用多个SQL数据库节点搭建的数据仓库系统.执行查询的时候,查询可以分散到多个SQL数据库节点上执行,然后汇 ...

  6. python兵器谱之re模块与正则表达式

    一.正则表达式 ·1.正则表达式的应用场景: 应用特有的规则,给我需要的符合规则的字符串,在字符串中只有符合条件的才会被匹配和从大段的字符串中提取需要的数据 ·匹配字符串的规则: ·1.字符串:用户输 ...

  7. CakePHP Model中( 获取Session)使用Component的方法

    有时候我们需要在Model中使用Session,大家知道CakePHP把操作Session的方法封装为了一个Component, 在Model中正常读取Session的方法: 在 "app_ ...

  8. typescript语法

    先来讲一讲TypeScript出现的背景 前端javascript的编程思想与后端java面向对象的编程思想有很大的不同,微软公司借鉴了coffeescript语言,继承了很多C#和java的编程思想 ...

  9. 腾讯WeTest开启“测试扶持计划”赠送重磅福利(含MTSC/TiD门票)

    WeTest导语 伴随着互联网行业的发展,与各行各业的连接更加紧密,竞争也变得越发激烈,用户对于产品的体验开始变得更加“挑剔”.然而目前互联网产品却始终受到各类质量问题的困扰.以兼容问题为例,应用平台 ...

  10. PHP使用Redis消息队列

    1.redis安装 参考:菜鸟教程http://www.runoob.com/redis/redis-install.html 2.安装php的redis扩展 1)phpinfo()查看php版本信息 ...