首页 > 代码库 > 面向对象(接口 ,多态)

面向对象(接口 ,多态)

接口

(1)当抽象类中的方法都是抽象的时候,java就提供了一种新的表现形式:接口 ,接口是功能的集合 接口不能创建对象
(2)格式
父接口:public interface Tnter{


}
子类:public class interImp implements Itner{

}

接口的使用
1.接口不能创建对象
2.定义实现类来实现接口
实现的关键字 implements
3.重写抽象方法
4.创建实现类对象 调用方法


接口的特点
1.不需要被abstract 修饰
2.类实现接口,可以单实现 还可以多实现
3.接口可以继承接口,可以单继承也可以多继承
4.接口与父类的功能可以重复,均代表要具备某种功能

接口的成员特点
成员变量 静态常量
固定修饰符 public static final
无论写不写 挑着写 都是这个修饰符 不变

成员方法
固定修饰符 public abstract
无论写不写 挑着写 都是这个修饰符 不变

抽象类和接口的区别
1.成员的区别
抽象类:
成员变量: 可以是变量,也可以是常量
构造方法:有构造方法,用于子类实例化使用
成员方法:可以是抽象的,也可以是非抽象的
接口:
成员变量:只能是常量
默认修饰符:public static final

成员方法:只能是抽象的
默认修饰符:public abstract

推荐:默认修饰符请永远自己手动给出
2.类和接口的关系区别
类与类:
继承关系,只能单继承,可以多层继承

类与接口:
实现关系,可以单实现,也可以多实现
类还可以继承一个类的同时实现多个接口

接口与接口:
继承关系,可以单继承,也可以多继承
3.体现的理念不同

抽象类里面定义的都是一个继承体系中的共性内容
接口是功能的集合是一个体系额外的功能,是暴露出来的规则


一切使用父类/接口引用的地方 都可以传入其子类/实现类对象

 

多态
同一个对象,在不同时刻体现出来的不同的状态
举例:水(水,冰,水蒸气)
猫(猫,动物)
前提:
A: 有继承或者实现关系
B: 有方法的重写
C: 有父类的引用指向子类对象
多态中的成员使用特点
Fu fz=new Zi();
多态时 所有表现形式都是父类的表现形式
只有调用方法时,运行的是子类重写的方法
1.成员变量
编译看左边 运行看左边
2.成员方法
编译看左边 运行看右边

 1         class Fu{
 2             int num=4;
 3             void show(){
 4                 system.out.println("showFu")
 5             }
 6 
 7         }
 8         class Zi extends Fu{
 9 
10             int num=5;
11             void show(){
12                 system.out.println("showZi");
13             }
14         }
15         class T{
16             public static void main(String args[]){
17                 Fu f=new Zi();
18                 system.out.println(f.num);
19                 f.show();
20             }
21         }

 

多态中的转型
1.向上转型
把子类对象赋值给父类(接口)的引用 自动类型提升
int a=0; double b=a;
Fu fz=new Zi();
2.向下转型
把父类(接口)的引用强制转换成子类对象
double b=10.0;
int a=(int)b;

Fu fz=new Zi();
Zi zi=(Zi)fz;
注意:Fu fu=new Fu()不能向下转型 会报ClassCastException类型转换异常

多态的好处及弊端
1.好处
提高了程序可维护性和可扩展性
2.弊端
不能适用子类特用内容
要想使用,要么向下转型,要么重新创建子类对象
多态的三种形式
1.具体的类多态 父类 变量名 =new 子类()
2.抽象类多态 父抽象类 变量名=new 子类()
3.接口多态 接口 变量名 =new 实现类()

instanceof关键字
格式:对象名 instanceof类名
返回值:true false
作用:判断指定的对象 是否为给定类创建的对象

Animal a1=new Cat();
Animal a2=new Dog();
method(a1)
public static void method(Animal a){

if(a instanceof Cat){
向下转型
调用猫特有的方法
  }
}

面向对象(接口 ,多态)