继承与多态

继承与多态,第1张

继承与多态

主要内容:

1.类的封装

2.封装性与访问修饰符

3.防止类的扩展和方法覆盖

4.抽象类

5.对象转化与多态

1.类的封装

1.1封装性

封装性是面向对象的一个重要特征。在Java语言中,对象就是一组变量和方法的封装体。

通过对象的封装,用户不必了解对象是如何实现的,只须通过对象提供的接口与对象进行交互就可以。
封装性实现了模块化和信息隐藏,有利于程序的可移植性和对象的管理。

1.2实现对象的封装的两种形式

 

(1)通过包实现封装性。在定义类时使用package语句指定类属于哪个包。包是Java语言最大的封装单位,它定义了程序对类的访问权限。
(2)通过类和类的成员的访问权限实现封装性。

2..封装性与访问修饰符

2.1访问修饰符

类(也包括接口和枚举等)的访问权限通过访问修饰符实现,它定义哪些类可以使用该类。

类的两种访问修饰符

给类修饰符的访问权限

实现封装时可以用setXxx和getXxx,如下例:

 

 2.2类继承的实现

实现类的继承,使用extends关键字,格式如下:
  [public] class SubClass  extends SuperClass{
      // 类体定义
  }

PS: 省略extends,定义的类继承Object类;Java仅支持单继承。

2.3方法覆盖

子类中可以定义与父类中的名字、参数列表、返回值类型都相同的方法,这时子类的方法就叫做覆盖(overriding)或重写了父类的方法。

PS: 子类不能覆盖父类的private方法;父类中static方法可以被继承,但不能被覆盖。

2.4super关键字

在子类中可以使用super关键字,它用来引用当前对象的父类对象。

适用于以下三种情况:

1)在子类中调用父类中被覆盖的方法,格式为:
    super.methodName([paramlist])

2)在子类中调用父类的构造方法,格式为:
    super([paramlist])

3)在子类中访问父类中被隐藏的成员变量,格式为:
   super.variableName

2.5调用父类的构造方法

子类不能继承父类的构造方法。要创建子类对象,需要使用默认构造方法或为子类定义构造方法。

Java语言规定,在创建子类对象时,必须先创建该类的父类对象。因此,在编写子类的构造方法时,必须保证它能够调用父类的构造方法。

在子类的构造方法中调用父类的构造方法有两种方式:

1)使用super来调用父类的构造方法
      super([paramlist]);

2)调用父类的默认构造方法,编译器在子类的构造方法的第一句自动加上
     super();

在任何情况下,创建一个类的实例时,将会沿着继承链调用所有父类的构造方法,这叫做构造方法链。

3.防止类的扩展和方法覆盖

3.1final修饰类

类使用final修饰,则该类就为最终类(final class),最终类不能被继承。

3.2final修饰方法

方法使用final修饰,则该方法不能被子类覆盖。

3.3final修饰变量

用final修饰的变量包括类的成员变量、方法的局部变量和方法的参数。一个变量如果用final修饰,则该变量为常值变量,一旦赋值便不能改变。

4.抽象类

比如要设计一个一般的类,比如几何形状(Shape)类,在该类中定义求周长和面积的方法。由于Shape不是一个具体的形状,这些方法就不能实现,因此要定义为抽象方法(abstract method)。

抽象类(abstract class)是包含抽象方法的类,使用abstract修饰;

抽象方法(abstract method)是只有声明,没有实现的方法,使用abstract修饰;

抽象类不能被实例化,定义抽象类的目的就是让其被继承的,抽象类中可以有非抽象的方法。

5.对象转化与多态

5.1对象转化

子类定义的类型称为子类型,而父类(或接口)定义的类型称为父类型。

子类对象和父类对象在一定条件下可以相互转换,这种转换一般称为对象转换或造型(casting)。

转换对象分为:

1)自动转换   upcasting     (向上转换)

子类对象可以自动转换为父类对象。可以将子类型的引用赋值给父类型的引用。

2)强制转换   使用()运算符(向下转换)

将父类对象强制转换为子类对象。用“()”运算符。将父类型的引用赋值给子类型的引用。

PS:不是任何情况下都可以进行强制类型转换(eg:如果试图将一个父类实例转换成子类类型,
则这个对象必须实际上子类实例才行(编译时类型是父类类型,而运行时类型是子类类型))

5.2多态与动态绑定

Java引用变量有两个类型:编译时类型和运行时类型;
编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。
如果编译时类型和运行时类型不一致,就可能出现所谓的多态。
多态的核心:父类引用指向子类对象同时子类重写了父类方法。

多态(polymorphism)就是多种形式,它是指Java程序中一个类或多个类中可以定义多个同名方法,这多个同名方法完成的 *** 作不同,这就是多态。

多态的类型:

 1)静态多态:也叫编译时多态,它通过方法重载实现。
 2)动态多态:也叫运行时多态,它通过方法覆盖实现。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5709008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存