您的位置:首页 > 编程语言 > Java开发

Java认证考试实例疑难辨析(6)

2016-02-12 01:54 267 查看
6.
【知识点】
(1)接口(Interface)
在Java语言中,接口定义方式与类(Class)相似,都属于引用类型(Reference Type),但是,接口只能包含常量(Constant)、方法签名(Method Signature)、默认方法(Default Method)、静态方法(Static Method)以及嵌套类型(Nested Type)。
接口中方法通常只有方法签名,并以分号结束,也就是只有方法头部,不包含方法花括号及实体部分。但是,默认方法和静态方法是例外,这两种方法定义是完整的,包含花括号及实体部分。
接口中所有方法都自动具有public属性的,所有字段都自动具有public static final属性。
接口是不能被实例化的,也就是不能直接对接口使用new关键词创建对象,接口只能被类实现(implements)或者被其他接口扩展(extends)。
(2)接口的默认方法(Default Method)
在实际应用中,我们经常会遇到已经定义好的接口功能不能满足应用要求,需要进行更新,但这个接口已经在应用中被其他类广泛地实现,如果更新接口,就意味着实现这个接口的所有类都必须重写以便实现新的接口方法,这样不仅工作繁重而且容易让已经稳定运行的应用引入新错误。
默认方法就是为了解决这个问题,原始接口中可以添加定义了完整功能的新方法,这些方法形式与普通方法相同,包括方法签名和方法实体,只是在方法签名的开始位置添加了default关键词表明这是默认方法,而且原来已经实现这个接口老版本的类不必进行任何修改可以继续使用,如果需要还可以直接使用接口中新添加的默认方法。
(3)接口的静态方法(Static Method)
接口中还可以定义静态方法,所有实现该接口的类可以共享该接口的静态方法。
静态方法形式与普通方法相同,包括方法签名和方法实体,只是在方法签名的开始位置添加了static关键词表明这是静态方法
(4)抽象方法(Abstract Method)
抽象方法是指只声明了方法签名但没有实现的方法,即方法签名后直接以分号结束,没有花括号和方法实体,在方法签名的开始位置添加了abstract关键词,如:
abstractvoid moveTo(double deltaX, double deltaY);
(5)抽象类(Abstract Class)
抽象类是在类声明中添加了abstract关键词的类,它可以有也可以没有抽象方法,包含了抽象方法的类一定是抽象类。抽象类不能被实例化,但可以被继承(extends)。
抽象类被继承时,子类实现了全部抽象方法才能实例化,否则,子类也必须继续声明为抽象类。
抽象类与接口有类似之处:包含未实现的方法,不能实例化;但是,抽象类可以包含定义完整的方法,这些方法可以是public、protected或private,还可以包含非静态的普通字段(Field)。
Java语言规定任何子类只能继承(extends)一个类,包括抽象类,但可以实现(implements)多个接口。
【例题】
Given:
public abstract class Shape {
  private int x;
  private int y;
  public abstract void draw();
  public void setAnchor(int x,int
y) {
    this.x = x;
    this.y = y;

  }

}

Which two classes use the Shape class correctly? (Choose two.)

A. public class Circle implements Shape {
     private int radius;

   }

B. public abstract class Circle extends Shape {
     private int radius;

   }

C. public class Circle extends Shape {
     private int radius;
     public void draw();

   }

D. public abstract class Circle implements Shape {
     private int radius;
     public void draw();

   }

E. public class Circle extends Shape {
     private int radius;
     public void draw() {/* codehere */}

   }

F. public abstract class Circle implements Shape {
     private int radius;
     public void draw() {/* codehere */}

   }
【Answer】 BE
【例题辨析】
A. Shape是类,只能 extends不能implements;
B. Circle继承(extends)抽象类 Shape,但没有实现Shape的抽象方法draw(),因此仍然是个抽象类;
C. Circle定义为继承了抽象类Shape的普通类,却没有实现Shape的抽象方法draw(),不符合普通类的语法规定;
D. Shape是类,只能 extends不能implements;
E. Circle定义为继承了抽象类Shape的普通类,并且实现Shape的抽象方法draw(),符合普通类的语法规定;
F. Shape是类,只能extends不能implements。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 抽象类 接口