接口与多态

来源:互联网 发布:excel2010数据验证 编辑:程序博客网 时间:2024/05/17 23:33
一、接口
1.格式
interface 接口名{
void show();//接口当中方法是没有实现.
}
接口里全是抽象方法(方法里省略了关键字public和abstract)
接口没有构造方法(因为成员默认修饰是public)而抽象类里有
接口与接口之间是多继承的
2.接口特点:
1.使用interface关键字来描述,接口里面的方法没有具体实现,类与接口之间通过implements关键字来实现
2.接口中的方法必须使用public来修饰(可省略),抽象方法可以使用默认权限.
3.接口不能被实例化,因为接口中没有具体实现的方法.
4.Animal.show(); 不能使用static关键字描述
5.不能使用final关键字修饰,因为接口的方法都需要实现。
3.接口中的成员
1.成员属性(常量(默认使用final修饰)):接口中可以有成员变量,而且实现类可以继承.
默认有public final 修饰,写程序时候建议都加上.
默认还有 static修饰成员变量.
说明接口中的成员常量(因为使用final进行修饰了)都是静态的.
接口中的常量用接口名来调用
2.成员方法:默认是public权限,默认的abstract. 默认都是公共的抽象方法.
为什么是public?我们申明的抽象方法是要具体被实现的,所以权限只能是最大的.
3.接口没有构造函数,因为接口中没有成员变量,只有成员静态常量,和成员公共的抽象方法.
4.接口的其他细节
1.接口可以多实现 class C implements A,B 就是一个类可以同时实现多个接口.
2.继承 接口可以多继承接口interface Inter3 extends Inter1,Inter2
注意:类与类只能单继承!
5.final:修饰的基本数据类型,其中的成员变量值不能被改变(因为这时候已经成为常量了)
修饰的引用类型 地址不能改变,但是地址所指向的成员可以改变
5.
类与类之间 单继承多重继承
类与接口之间 多实现
接口与接口之间 多继承
6.抽象类和接口的区别:
1、抽象类只能单继承,接口可以多实现
2、抽象类中可以有变量和常量可以是public static final 接口中只有静态的常量public static final
抽象类中可以有抽象方法,也可以有具体方法, 接口只能有公用的抽象方法
抽象类有构造函数,多个参数的构造函数, 接口没有构造函数

二、多态
1.概述:某一类事物在运行时的具体体现。(官方定义)
2.多态实现的三个条件:多态是基于继承的,重写,父类引用指向子类对象
接口中用的最多;普通类中基本不用
3.多态的好处:增加代码重用,提高效率
4.多态成员基本特性
1.成员变量:多态中的不能访问具体实现类的特有属性(帆式理解:就是只能调用接口里自己有的东西,专属别人的调不动)
2.成员方法(只能调用接口里自己有的东西,专属别人的调不动)
多态中不能访问具体实现类中的特有方法
3.构造方法:创建子类对象的时候,访问父类的构造方法,对父类数据进行初始化
4.静态方法:编译看左边,运行看左边
弊端:多态中不能去访问具体实现类的特有的成员
static (如果父类有的话,找的是父类中的)隐藏一方面针对静态方法一方面针对成员变量
5.多态的转型:
向上转型就是多态
向下转型就是使用的是强制类型转换,目的:为了解决多态的弊端
向下:父类的引用赋给子类引用(需要强制转换)
Zi extends Fu
class Fu
向上转型(多态):Fu z1 = new Zi();
向下转型 :Zi z2 = (Zi) z1;
所以多态机制遵循的原则概括为:当父类对象引用变量 引用 子类对象时,被引用对象的类型 而不是引用变量的类型 决定了调用谁的成员方法,但是这个被调用的方法必须是在父类中定义过的,也就是说被子类覆盖的方法,但是它仍然要根据继承链中方法调用的优先级来确认方法,该优先级为:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。
6.引用的多态
父类的引用指向本类对象
7.方法的多态
创建本类对象时,调用的方法为本类的方法
创建子类对象时,调用的方法为子类重写的方法或继承的方法
8.引用类型转换
a 向上类型转换(隐式/自动类型转换) 小类型到大类型
b 向下类型转换(强制类型转换) 大类型到小类型
instanseof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法: result = object instanceos class
说明:如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。

原创粉丝点击