现在的位置: 首页 > 综合 > 正文

Java+7入门经典 – 6 扩展类与继承 Part 1/2

2013年07月22日 ⁄ 综合 ⁄ 共 1267字 ⁄ 字号 评论关闭

第6章 扩展类与继承

面向对象编程的一个重要特性: 允许基于已定义的类创建新的类;

6.1 使用已有的类

派生 derivation, 派生类 derived class, 直接子类 direct subclass; 基类 base class, 超类 super class;

1
2
3
4
5
6
class Dog
{
//
Members of the Dog class...
}
class Spaniel extends Dog
{
//
Members of the Spaniel class...
}

6.2 类继承

派生类中包含基类成员, 并且能从派生类中访问这些成员, 称为类继承 calss inheritance; 

基类的继承成员 inherited member, 是指派生类内部可访问的成员; 如果基类成员在派生类中不可访问, 那么它不是派生类的继承成员, 但是那些没有被继承的基类成员仍然是派生类对象的一部分; 派生类对象包含基类的所有继承成员-域和方法;

6.2.1 继承数据成员

>和基类在同一包中的子类继承了除private数据成员之外的所有内容; 包外的派生类不会继承private成员和没有访问属性的数据成员;

Note 必须将基类声明为public, 否则包外无法派生类;

protected可以包内访问, 可以包外继承, 没有访问修饰符的类成员称为包私有 package-private; 

继承规则适用于static的类成员和非static成员; static变量只有一份, 由类的所有对象共享, 每个对象则有属于自己的实例变量集合;

被隐藏的数据成员

在派生类中定义了与基类中某个数据成员同名的数据成员;(不推荐); 这种情况下, 基类的数据成员仍然被继承, 但是会被同名的派生类成员隐藏; 

Note 不论类型和访问属性是否一样, 名称一样的情况下, 基类成员在派生类中被隐藏;

如果要指向基类成员, 必须使用关键字super限定, 表明超类成员; (通常在使用Java库类或第三方设计或维护的包时会需要使用super区分同名基类成员);

6.2.2 继承方法

基类的普通方法(非构造)被继承到派生类的方式和数据成员一样;

Note 不论构造函数的属性, 都不会被继承;

1) 派生类对象

基类成员都在派生类对象中, 但是有些被限定无法访问;

Note 如果没有从派生类构造函数中调用基类构造函数, 编译器会自动操作; 

2) 派生类

1
2
3
4
5
6
7
8
9
public class Animal
{
    public Animal(String
aType) {
        type
new String(aType);
    }
    public String
toString() {
        return "This
is a "
 +
type;
    }
    private String
type;
}
1
2
3
4
5
public class Dog extends Animal
{
//
constructors for a Dog object
    protected String
name; 
//
Name of a Dog
    protected String
breed; 

抱歉!评论已关闭.