接口--多态

1.写出定义接口的格式
interface A{
     public abstract void work();
}
注:
(1)接口的权限修饰符如果不标明,默认为default,仅可在本包中访问;
(2)接口中的方法必须为抽象方法,且public abstract可以不写,默认为public abstract.实际开发中通常写为 public void work();
(3)接口的子类叫做实现类,命名方式一般为:接口名+Impl,如InterfaceImpl;
(4)java8中有新特性,可实现类方法(static修饰,可由接口名直接调用)和默认方法(default修饰,由实现类的实例化对象调用);


2.写出实现接口的格式
实现接口的类称为实现类,格式如下:
//定义接口
interface A{
     public void work();
}
//定义实现类
class B implements A{
     public void work(){
         System.out.println("实现类");
     }
}

3.说出接口中成员的特点
接口由全局常量和抽象方法构成.全局常量由public static final修饰.如:
interface A{
     public static final String str = "abc";
     public void work();
}


4.接口和抽象类的区别
区别:
1)是否提供实现方法:抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码复用性;接口只能包含抽象方法(java7及以前);
2)继承与实现:接口可以同时继承多个接口;一个类只能继承一个直接父类(可以为抽象类),却可以实现多个接口(弥补了单继承的局限);
3)共性与扩展:抽象类为继承体系中的共性内容,接口为继承体系中的扩展功能.

相同:
1)顶端:都位于继承的顶端,用于被其他类实现或继承;
2)实例化对象:都不能直接实例化对象;
3)抽象方法:都可以包含抽象方法,其子类必须覆写这些抽象方法

选用:
1)优先用接口,少用抽象类
2)需要定义子类的行为,又要为子类提供共性功能时才选用抽象类


5.能够说出使用多态的前提条件
有继承(extends)关系或实现(implements)关系


6.理解多态的转型
举例:父类Person  子类Student
Person p = new Student();    //向上转型(自动转换),转换完成后p可访问父类的成员变量,调用子类覆写的成员方法,但不能调用子类特有的成员方法

Student stu = (Student) p;    //向下转型,stu可访问子类中的成员变量,可调用父类方法(继承)和子类中的所有方法

7.理解多态
java引用变量有两个类型:一是编译时类型,一是运行时类型。编译时类型由声明该变量时使用的类型决定;运行时类型由实际引用的对象决定。如果编译时类型与运行时类型不一致,就可能出现多态(Polymorphism)。方法的重载/覆写,实例化对象的转型等都属于多态的范畴。

原文地址:https://www.cnblogs.com/huguangqin/p/7124005.html