继承和多态

   继承和多态是面向对象编程的两大特性,同时也是Java当中非常重要的两大机制,对于软件开发的重用具有重要意义。下面分别概述这两种机制在Java中的应用。

   一、继承

对于继承的理解:继承是一种提高软件重用的机制,是对事物认识的一种方法。

表现为:

父类:公共属性和公共方法的集合,

子类:一种扩展和延伸的表述。

继承注意的点可以简单归纳为两方面:

1、以构造方法为代表的一系列子类中对父类的使用:子类不继承父类的构造方法,子类创建对象需先调用父类构造方法,可概括为:需要特殊调用父类具体某个构造方法,用super(实参1,实参2,....),否则默认调用父类无参构造方法,这就要求父类若自己定义了构造方法,应习惯性地为其加上一个无参构造方法,避免出错。调用父类其它成员用super.父类成员 即可实现调用。

2、修饰符。分两种,一是修饰类,二是修饰类成员。对类的修饰要么不写默认包访问权限,要么只有public修饰,而对类成员的修饰则有public\protected\private以及默认不写四种。各自的访问权限就不加以赘述,需注意的一点是默认不写修饰符是包访问权限,而protected在它的基础上多一个其他包的子类也可以有权访问。

  二、多态

多态更准确或者说编程更看重的是:同一 引用类型,由于不同实例的使用而执行不同的操作,这是由于继承和类型转换而带来的,这更应该准确地称之为“运行时多态”但其实多态知识概述为两个方面:一是方法的重载,二是方法的覆盖或者说是重写。下面简述这两者的注意点。

1、方法的重载

实现:方法名相同,参数个数、类型、顺序不同。

注意:进行重载时,系统先按精确类型匹配参数,找不到再按自动类型转换匹配的方式查找。

2、方法的覆盖(随之即有属性的隐藏)

实现:子类与父类有相同的方法名、参数列表,返回值类型相同或为父类方法返回值类型的子类型。

注意:子类对父类的覆盖不能改变方法的静态或非静态属性,另外子类的覆盖给方法修饰符的限制不能大于父类。

三、继承和多态带来的两个问题。

(一)final关键字。

使用:修饰类,该类为最终类,不能被继承,修饰方法,方法不能被子类重写,修饰变量,变量变成常量,只能被赋值一次。

注意:

1、被final修饰的类中的方法,私有的方法,不加final修饰也默认是final的。

2、final修饰的常量,它只能固定指向一个对象,虽只能被赋值一次,但这个对象本身是可以改变的。

例如定义一个字符串对象,是final的虽然引用变量只能永远指向这一个对象,但可以对这个字符串改变。

(二)子类与父类的赋值与转换。

子转父,或子类赋值给父类是允许的,但父类转子类需要强制转换,此时要求该父类指向的就是该子类的一个对象。另外需要注意的是:子类对象赋值给父类,访问方法是子类对父类覆盖的子类方法,而访问属性却是父类的属性,即使子类中有与父类同名的属性,此外,由于静态成员是依赖于类的,所以对静态成员的引用也取决于引用变量的类型,即父类,即使子类对父类的静态方法有覆盖。

你可能感兴趣的:(Java)