面向对象(二)
-
继承(单继承方式:即每个子类只能有一个直接父类)
·继承是面向对象程序设计的又一重要特性,是面对对象编程技术的一块基石,因为它允许创建分等级层次的类,继承是可以实现代码复用的重要手段
·语法规则:【访问权限】class 子类名 extends 父类名;
注:(其中extends是继承关键字,后面跟着父类的类名,如果没有extends子句则这个类直接继承Object。需要注意的是:父类名所指定的类必须是在当前编译单元中可以访问的类,否则会报错)
·覆盖:子类除了可以继承父类中的成员方法和成员变量,还可以增加自己的成员方法和成员变量,也可以根据需要重写父类的方法。
1成员变量的覆盖:子类中定义的成员变量和父类中的成员变量同名,不管其类型是否是相同,父类中的同名成员变量都要被隐藏,子类就无法继承该变量了。
2成员方法的覆盖:子类中定义的成员方法和父类中的成员方法在方法名,返回类型,参数个数及类型方面都相同。
3覆盖规则: --.覆盖方法的返回值类型必须与它所覆盖的方法相同。
--.覆盖方法分的参数类型和参数个数与它所覆盖的方法同。
--.覆盖方法不能比其所覆盖的方法访问权限小。
--.覆盖方法不能比它所覆盖的方法抛出更多的异常。
·super关键字:
1 .访问被子类隐藏的超类的成员变量和成员方法,语法格式为:
Super.数据成员
Super.成员方法(参数)
2.调用父类的构造方法(必须写在子类构造方法中的第一行)
Super.(<参数列表>)
·final关键字:
- 表示含义:final关键字代表最终的、不可改变的,不能派生子类。
- 常见用法:1修饰类
例:public final class 类名称 {
...
}
作用:使当前这个类不能有任何子类。
注意:一个类如果是final的,那么其中所有的成员方法都无法 进行覆盖重写
2修饰方法
例: 修饰符 final 返回值类型 方法名称(参数列表) {
方法体
}
作用:当final关键字用来修饰一个方法的时候,这个方法就是最终方法,不能够被覆盖重写
注意:对于类、方法来说,abstract关键字和final关键字不能
同时使用,因为作用相互矛盾
3修饰局部变量
例:final 基本数据类型 数据名称 = 值;
注意:当final关键字用于修饰局部变量的时候,这个局部变量不能更改,“一次赋值,终生不变”。
4修饰成员变量
-由于成员变量具有默认值,所以用了final之后必须手动赋值,
不会再给默认值。
(二)抽象类
-没有足够的信息来描述一个具体的对象
-只用于继承,不能用于创建对象
-一个抽象类一般包括一个或者多个抽象方法
- 抽象类的实现
-抽象类有abstract修饰,语法格式为:
abstract calss 类名{
类成员定义
}
- 可以在抽象类中声明并实现方法
- 抽象类的子类必须实现父类的所有的抽象方法后才能实例化,否则这个子类也会成为抽象类。
- 抽象类不能实例化。
- 抽象方法
·只声明而没有实现的方法称为抽象方法
·语法格式:
abstract 返回值类型 抽象方法名(【形式参数列表】)
·构造方法不能定义为抽象方法
·最终方法不能定义为抽象方法
·static和private修饰符不能用于抽象方法
·含有抽象方法的类必须被声明为抽象类,抽象类不能被实例化
(三)接口(interface)
- 接口的概念
·抽象方法和常量值的集合,实现多重及策继承的效果
·一种特殊的抽象类,在某个类中要使用这个接口时,就要在这个类的定义时声明要实现某个接口
- 接口的定义
·接口的语法格式:
【修饰符】 <interface> <接口名> 【extends 父接口列表】{
【public】 【static】 【final】 变量名=初始值;//静态常量
【public】 【abstract】 返回值 方法名(【参数列表】 throws【异常列表】)
}
·接口用关键字interface来定义,而不是class
·接口采用多重继承机制,而不是采用类的单重继承机制
- 接口的继承
public interface A extends B,C{
//接口中的语句
}
- 接口的实现
·语法格式;
类修饰符 class 类名 【extends 父类名】【implements 接口名列表】{
//类中重写接口的抽象类
}