`
atmosphere
  • 浏览: 14122 次
  • 性别: Icon_minigender_1
博客专栏
807a8b01-317a-34bf-9d0f-011a7c5a74b4
javase7官方教程翻译...
浏览量:10675
社区版块
存档分类
最新评论

JAVASE官方教程:继承之概述(6)

阅读更多

在前面的课程中,你多次看到继承被提及.在java语言中,类可以派生于其它的类,包括其它类中的属性和方法.

 

声明:

继承类叫做子类(也叫做派生类,扩展类).被继承的类叫做超类(也叫做基类,父类).

除了Object没有父类,其它的类都有且只有一个父类(单继承).在定义一个类时若没有父类,则隐含继承Object,每一个类都是Object类的子类.

 

继承的思想是简单并且强大的:当你想创建一个新类,并且已经存在的类中有你想要的代码,你可以从已经存在的类派生出新类.

 

一个子类从父类继承所有的成员(members).构造函数不是成员,所以不被继承,但是可以在子类中调用父类构造方法.

 

Java平台的类继承

在java.lang包中的Object类定义并且实现了所有类的共同行为.在Java平台,大多数类直接派生与Object类,下面是类继承结构.

 

继承结构


Object类是通用的,在继承结构的最顶端.靠近底端的类则提供更加具体的行为.


一个继承的例子

public class Bicycle {
	
    //Bicycle类有三个属性
    public int cadence;
    public int gear;
    public int speed;
	
    //Bicycle类有一个构造方法
    public Bicycle(int startCadence, int startSpeed, int startGear) {
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;
    }
	
    //Bicycle有四个方法
    public void setCadence(int newValue) {
        cadence = newValue;
    }
	
    public void setGear(int newValue) {
        gear = newValue;
    }
	
    public void applyBrake(int decrement) {
        speed -= decrement;
    }
	
    public void speedUp(int increment) {
        speed += increment;
    }
	
}

 

 

声明一个MountainBike类是Bicycle的子类:

public class MountainBike extends Bicycle {
	
    // the MountainBike subclass adds one field
    public int seatHeight;

    // the MountainBike subclass has one constructor
    public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) {
        super(startCadence, startSpeed, startGear);
        seatHeight = startHeight;
    }	
	
    // the MountainBike subclass adds one method
    public void setHeight(int newValue) {
        seatHeight = newValue;
    }	

}

 MountainBike继承了Bycycle的所有属性和方法,并且增加了一个属性seatHeight和一个方法.除了构造方法,你就想重新写了一个完整的包含4个属性5个方法的类.如果Bycycle类的方法非常复杂并且需要花大量时间调试,那这样做是非常有价值的.

 

你能在子类里做什么

不管子类在哪个包里,一个子类从父类继承所有的public和protected成员.如果子类跟父类在相同的包(package)中,他也继承具有包权限的成员.你可以使用,覆盖,改写这些成员:

  • 继承的属性可以想其他属性一样直接使用.
  • 可以声明一个与继承的属性同名的属性来隐藏(hidding)继承的属性(不推荐)
  • 可以声明一个父类中没有的属性
  • 继承的方法可以直接使用
  • 可以写一个新的方法与继承的方法有相同的标签来重写(overriding)它.
  • 可以写一个静态(static)方法与继承的方法具有相同的标签来隐藏(hidding)它.
  • 你可以声明一个新的方法.
  • 可以在子类的构造方法中调用父类的构造方法,隐式或者用关键字super.

下面的部分将扩展这些话题.

 

父类中的私有成员

子类不会继承父类中的私有成员.然而,如果父类中有public或者protected方法访问了它的私有属性,那些方法仍然是可以使用的.

 

一个对它的封装类具有全部的访问权限,即使是私有成员.那么一个public或者protected的嵌套类被某个类继承,这个类对封装类的所有成员都具有间接的访问权限.

 

对象转换

如果我们写

public MountainBike myBike = new MountainBike();

 

那么myBike是MountainBike类型的.

 

MountainBike是Bicycle类和Object类的后代.所以,一个MountainBike是一个Bicycle也是一个Object,他可以被用在所有Bicycle或者Object类型的的地方.

 

反过来就不一定是对的了:一个Bicycle可能是一个MountainBike,也可能不是.转换(Casting)展示了一种类型替代另一种类型的用法,例如:


Object obj = new MountainBike();

 

obj既是一个Object,也是一个MountainBike.这叫做隐式转换.

 

另一方面,我们写

 

MountainBike myBike = obj;

 

我们将会得到一个编译时错误,因为编译器不知道obj是一个MountainBike.然而,我们可以用现实类型转换告诉编译器我们保证给obj赋值的MountainBike:


MountainBike myBike = (MountainBike)obj;

 

这种转换将对obj的赋值插入一个运行时检查(runtime check)让编译器能够安全地认为obj是一个MountainBike.如果obj在运行时不是一个MountainBike,将抛出一个异常.

 

注意:你可以用instanceof操作符测试一个特定对象的类型.可以让你避免因为一个不合适的转换而发生运行时错误.例如:
if (obj instanceof MountainBike) {
   MountainBike myBike = (MountainBike)obj;
}

分享到:
评论

相关推荐

    JavaSE之继承的概述

    这个文件里的内容适合Java初学者,这也是小编在刚开学学习JavaSE时记录的一些笔记,里面的内容非常适合JavaSE入门者学习,都是浅显易懂的话语,没有太多的官方话,绝对是你初学JavaSE的宝典,针对人群:刚入门的...

    javaSE代码实例

    8.1 继承概述 122 8.1.1 类之间的关系 122 8.1.2 面向对象中的继承性 124 8.2 类的继承 125 8.3 成员变量的继承与隐藏 126 8.3.1 成员变量的继承规则 126 8.3.2 成员变量的隐藏 129 8.4 对象引用的...

    javaSE自学入门基础

    内含概述,语法简介,基本数据类型介绍,类和对象浅析,继承多态,访问控制,抽象类,接口,几大常用类和GUI的有关编程设计。适合0基础或初学者自学。

    JavaSE基础学习笔记

    JavaSE 星辰学习笔记 简介 如何高效的学习Java 案例:创建一个博客网站typecho 基础 Java程序运行机制 数据类型 变量 变量作用域 常量final 变量的命名规范 运算符 for循环 增强for循环 break continue 练习 Java的...

    Java SE实践教程 pdf格式电子书 下载(四) 更新

    第6章 三头六臂——线程和同步的基本概念 109 6.1 讲解 110 6.1.1 什么是线程 110 6.1.2 创建线程 110 6.1.3 线程的生命周期 112 6.1.4 线程的优先级 114 6.1.5 中断线程 115 6.1.6 线程组 116 6.1.7 处理未...

    java_blog:关于Java

    Include JavaSE、JavaEE and the other knowledge about JavaChapter1:概述Chapter2:变量和数据类型Chapter3:流程控制Chapter3:3、循环结构Chapter4:数组Chapter4:1、数组Chapter5:面向对象Chapter5:1、类和...

    Java SE实践教程 pdf格式电子书 下载(一) 更新

    第6章 三头六臂——线程和同步的基本概念 109 6.1 讲解 110 6.1.1 什么是线程 110 6.1.2 创建线程 110 6.1.3 线程的生命周期 112 6.1.4 线程的优先级 114 6.1.5 中断线程 115 6.1.6 线程组 116 6.1.7 处理未...

    Java基础笔记知识点.rar

    JavaSE 之前整理的笔记,一共16章:1.Java概述,2.基本数据类型与运算符,3.流程控制与数组,4.面向对象1(类和对象 方法 构造方法),5. 面向对象2(成员变量与局部变量 常用系统类 包 访问控制符 String),6.面向对象3...

    Java SE实践教程 源代码 下载

    Java SE实践教程 源代码 2010-9-13 声明:在网上找了好久才找到这个源码,真不容易啊,请大家多多支持。 2010-9-13 内容简介:此书结合具体实例讲解,通俗易懂,又不乏深度。我觉得这本书写的确实不错,堪称经典,...

    Java核心技术卷一-完整书签-pdf

    Java领域最有影响力和价值的著作之一,拥有20多年教学与研究经验的资深Java技术专家撰写(获Jolt大奖),与《Java编程思想》齐名,10余年全球畅销不衰,广受好评。第9版根据JavaSE7全面更新,同时修正了第8版中的...

    《Java基础复习》—常识与入门

    Java面向对象的核心逻辑:OOP(面向对象编程)、封装、继承、多态、接口。。。。。。 JavaSE高级应用程序:异常、集合、线程、IO、反射、网络 二、常识与概述 计算机能直接识别的是机器指令,机器指令的封装是汇编语言...

    java基础案例与开发详解案例源码全

    第6章 6.1 继承156 6.1.1 Java的继承思想实现157 6.1.2 super关键字158 6.2 Object类160 6.3 多态161 6.3.1 多态概念的理解161 6.3.2 Java中多态的实现162 6.2.3 类型检测.向上转型.向下转型164 6.2.4 动态绑定166 ...

Global site tag (gtag.js) - Google Analytics