java复习之继承和多态

子类

子类对象“is a”父类对象,在程序设计上还体现着另一大特点,就是使用了继承。

extends关键字

格式如下:
修饰符 class 子类名 extends 父类名{
     类体
   }

Object类

主要方法:
  ·public final Class getClass( ):获取当前对象所属的类信息,返回Class对象。
  ·public String toString( ):按字符串对象返回当前对象本身的有关信息。
  ·public boolean equals(Object obj):比较两个对象是否是同一个对象,是则返回true。

equals()与==

equals:判断值是否相等
==:判断地址空间是否相等

使用父类的成员

使用规则:

  1. 父类中使用private定义的属性,子类不能访问
  2. 子类不可以降低父类的访问权限

对象转型

可以将子类的对象赋给父类的变量。但反过来是错误的,不能把父类的实例赋给子类的引用。

instanceof的使用

  instanceof的使用示例
  public void method(Employeee{
  if(einstanceof Manager{
  /*对Manager对象进行处理*/
  }
  else if(einstanceof Contractor{
  /*对Contractor对象进行处理*/
  }
  else{
  /*对Employee对象进行处理*/
  }

作用是:判断父类的实例指向哪个子类。

方法覆盖

父类中原有的方法可能不能满足新的要求,因此需要修改父类中已有的方法。这就是方法覆盖(Over ride),也称为方法重写或隐藏。从逻辑上看就是子类中的成员方法将隐藏父类中的同名方法。
子类中定义方法所用的名字、返回类型及参数列表和父类中方法使用的完全一样,也就是具有相同的方法签名。
覆盖使用规则:
  ·覆盖方法的允许访问范围不能小于原方法。
  ·覆盖方法所抛出的异常不能比原方法更多。

super

如果子类已经重写了父类的方法,但在子类中还想使用父类中被隐藏的方法,就使用super关键字
如果调用super的话,必须放在第一行。

终极类和抽象类

Java中有一个重要的关键字final,它表示终极,既可以修饰一个类,也可以修饰类中的成员变量或成员方法。
如果—个类被定义为final,则它不能有子类;如果一个方法被定义为final,则不能被覆盖;如果一个变量被定义为final,则它的值不能被改变

抽象类

与之相对应的是关键字abstract,它可以用于类或方法,表示抽象。使用abstract修饰的方法的方法体为空,修饰的类必须被子类继承。有的时候一些类是不能被继承的。Java中预定义的Java.lang.String就是如此。
定义了方法但没有定义具体实现的类称为抽象类。在程序中不能用抽象类作为模板来创建对象,必须生成抽象类的一个非抽象的子类后才能创建实例。反之,不能在非抽象的类中定义抽象方法。也就是说,只有抽象类才能具有抽象方法。如果一个抽象类除了抽象方法外什么都没有,则使用接口更合适。
格式:
  public abstract class 抽象类名{
  //抽象类
    类体
    }
  public abstract 返回值类型 抽象方法名([参数列表]);

不论是类还是方法都要用关键字abstract进行修饰。抽象类的子类所继承的抽象方法同样还是抽象方法
,包含抽象方法的类一定是抽象类,但抽象类中的方法不一定都是抽象方法。抽象类是不能创建对象的。除非通过间接的方法来创建其子类的对象,但是可以定义一个抽象类的引用变量。

接口

接口是体现抽象类功能的另一种方式,可将其想象为一个“纯”的抽象类。它允许创建者规定一个类的基本形式,包括方法名、参数列表以及返回值类型,但不规定方法体。因此在接口中所有的方法都是抽象方法,都没有方法体。
java特性:单继承,多重实现。具体来说,Java不支持多重继承的概念,一个类只能从唯一的一个类继承而来。但是,这并不意味着Java不能实现多重继承的功能。具体来说,Java允许一个类实现多个接口,从而实现了多重继承的能力,并具有更加清晰的结构。
定义格式:
  [接口修饰符] interface 接口名[extends父接口列表]{
  ……//方法原型或静态常量
  }
接口与一般类一样,本身也具有数据成员变量与方法,但数据成员变量一定要赋初值,且此值不能再更改,而方法必须是“抽象方法”。
  interface CharStorage{//使用interface说明
  void put(char c);//抽象方法,没有{}
  char get( );//抽象方法
  }
在接口中定义的成员变量都默认为终极静态变量,即系统会将其自动添加final和static这两个关键字,并且对该变量必须设置初值。

终极方法

成员方法也可以被标记为final,从而成为终极方法或终态方法。被标记为final的方法将不能被覆盖。
格式为:
  final 返回值类型 终极方法名([参数列表]){
   方法体
  }
要实现接口,可以在类的声明中用关键字implements来表示。接口中的所有抽象方法必须在类或子类中实现。implements语句的格式如下。
  public class 类名 implements 接口名[,接口名[,接口名]]{
  /抽象方法及终极静态变量的定义/
  }

终极变量

一个变量被标记为final,称为终极变量或终态变量。实际上它会成为一个常量。企图改变终极变量的值将引起编译错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值