您的位置:首页 > 其它

关于面向对象里的子类继承问题

2012-03-29 14:43 302 查看
---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

/*面向对象的两大基本特征“继承”和“多态”使它区别于“基于对象”。

   实际上,“继承”是“多态”的基础,“多态”是“继承”的一种重要表现,两者密不可分。

   方法的名称和参数表只是方法的一个声明,打比方来说就相当于对象的一个引用,引用的内容便是放在由方括号括起的代码块;在abstract类和接口(Interface)里,可以将方法的声明和实现分隔开。即使没有将方法的声明和实现分隔开,在编译的时候,编译器需要的也只是方法的声明,其具体实现只有在运行时才会被关心。因为在java中,所有方法绑定都为“运行时绑定”,除非一个方法被明确声明成final。

    子类通过定义一个和父类的某个方法拥有同样名称和参数表的方法来达到“覆盖”的目的。但是要记住的是,在子类内部能够访问到那个父类方法是覆盖该父类方法的一个必要前提!如果在子类内部看不到那个父类方法,即使定义了和父类的某个方法拥有同样名称和参数表的方法,实质上也没有达到“覆盖的真正目的”。

*/

覆盖和重载的区别:

public class Base{

    public void method(){

    }

}

public class Sub extends Base

{

    public void method(){ } //覆盖Base类的method方法

    public int method(int a){ }//重载Sub类的method方法

}

/*

1.子类方法不能缩小父类方法的访问权限(可以扩大),而且子类不能抛出比父类方法更多的异常,其必须抛出和父类方法抛出的相同的异常,或者子类方法抛出的异常类是父类方法抛出的异常类的子类。

2..父类的静态方法不能被子类覆盖为非静态方法。同样,父类的非静态方法不能被子类覆盖为静态方法。

3..子类可以定义与父类的静态方法同名的静态方法,以便在父类中隐藏父类的静态方法。子类覆盖静态方法和覆盖一般方法的区别是,运行时,JVM把静态方法和所属类绑定,而将一般方法和所属实例绑定。

4..父类的私有方法不能被子类覆盖。虽然不会出现编译错误,但是实际上子类并没有从父类继承这个方法,所以,其并没有覆盖关系。

5..父类的抽象方法通过子类实现父类的抽象方法或者子类重新声明父类的抽象方法来实现覆盖。

6..父类的非抽象方法可以被覆盖为抽象方法。

*/

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流!
----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息