• java继承(翻译自Java Tutorials)


    原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/11/25/2788247.html

    继承介绍

    在java语言中,类可以从其他类继承而来,并继承父类的成员和方法。

    继承是简单但是非常强大:当你需要创建一个新类,但是已经有其他类,它已经包含了一些你需要的代码,那么你可以从已有的这个类,继承新的类。这样,你不用写重复的代码和调试,就可以重用已有类的成员和方法。

    子类从父类继承所有的成员(变量,方法和内部类),构造方法不是成员,所以不会被继承,但是子类的构造方法可以调用父类的构造方法。

    在java平台中,java.lang.Object是所有类的父类,有些类直接继承Object,有些类间继承其他类,其他类继承自Object。

    继承例子

    Bicycle类

    public class Bicycle {
            
        // the Bicycle class has
        // three fields
        public int cadence;
        public int gear;
        public int speed;
            
        // the Bicycle class has
        // one constructor
        public Bicycle(int startCadence, int startSpeed, int startGear) {
            gear = startGear;
            cadence = startCadence;
            speed = startSpeed;
        }
            
        // the Bicycle class has
        // four methods
        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继承Bicycle的所有变量和方法,并添加了seatHeight变量和对应的set方法。MountainBike新类,它有四个变量和五个方法,不过你未必要全部都要使用。

    如果Bicycle的方法很复杂,并已经使用了大量的时间调试,那么这种复用代码的方式,是相当简单并有价值。

     

    子类能做的事情

    子类继承父类所有的public和protected成员,不管父类在哪个包。如果子类和父类在同一个包,它也会继承父类的package-private成员(没有修饰public,privat,protected的成员),对于继承的成员,可以替换它,隐藏它,或者补充新成员:

    1.被继承的成员变量可以直接使用,就像使用其他成员

    2.声明一个新成员变量,名字和父类的成员变量名字一样,就隐藏了该成员(不推荐)

    3.声明不存在父类的新成员变量。

    4.继承的方法可以直接使用

    5.在子类实现一个与父类签名一样的方法,可以覆盖父类的方法。

    6.在子类实现一个与父类签名一样的新的static方法,可以覆盖父类的方法。

    7.可以声明一个不存在父类的新成员方法。

    8.实现一个子类的构造器,通过隐式或者显示使用super调用父类的构造器。

    父类的private成员

    子类不会继承父类的private成员,但是,如果父类已经有public或protected方法访问的私有成员,那么通过可以继承的方法,依然可以间接访问父类的private成员.

    内部类可以访问嵌套类的所有成员,包括嵌套类private成员。

    对象转换

    一个对象的实例化,我们可能这么写:

    public MountainBike myBike = new MountainBike();

    这表示myBike是MountainBike类型。

    MountainBike派生自BicycleObject,所以,一个MountainBike实例既是一个Bicycle,也是一个Object.

    而逆转的未必是可以的:一个Bicycle未必是MountainBike。同样的,一个Object未必是Bicycle或者MountainBike。

    类型转换显示在允许的继承和实现中,一个对象,从一种类型替换为另一种类型的用法.例如

    Object obj = new MountainBike();

    这样obj既是一个Object,也是一个Mountainbike。

    另一边,我们这么写:

    MountainBike myBike = obj;

    我们会遇到一个编译时错误,因为对于obj,编译器不知道它是一个MountainBike。尽管如此,我们可以告诉编译器,通过显示转换,将obj转换为类型MountainBike

    MountainBike myBike = (MountainBike)obj;

    这种转换为插入一个运行时检测,编译器会安全假设obj是一个MountainBike类型,但如果obj不是一个MountainBike,运行时,会抛出异常。

    当然,你可以使用instanceof操作符做逻辑测试,判断obj是否MountainBike类型再做转换

    if (obj instanceof MountainBike) {
        MountainBike myBike = (MountainBike)obj;
    }

    这样,我们做类型转换,就不会有运行时异常抛出了。

  • 相关阅读:
    SQL Server 2005中的分区表(六):将已分区表转换成普通表
    关于SQL Server中分区表的文件与文件组的删除(转)
    MySQL修改root密码的几种方法
    Aptana 插件 for Eclipse 4.4
    IT励志与指导文章合集(链接)
    正则表达式(转)
    《疯狂原始人》温馨而搞笑片段截图
    指针函数与函数指针的区别(转)
    Linux内核@系统组成与内核配置编译
    2015年我国IT行业发展趋势分析(转)
  • 原文地址:https://www.cnblogs.com/ggjucheng/p/2788247.html
Copyright © 2020-2023  润新知