150 likes | 372 Views
第三章 (2) Java 的接口和包 3.5 接口 (Interface) 方法定义和常量的集合。 Java 可以创建一种称作接口 (interface) 的类,在这个类中,所有的方法都是抽象的,也就是说它们都只有说明没有定义,由实现该接口的类来提供方法的具体实现。 一个接口 , 多个方法. 3.5.1 定义接口 [public] interface 接口名 [extends 父接口名列表 ]{ [static| final] 类型 最终变量名 =value ; // 常量名 …… ; 返回类型 方法名 ([ 参数表 ]) ; // 抽象方法说明 ;
E N D
第三章(2) Java的接口和包 3.5 接口(Interface) 方法定义和常量的集合。 Java可以创建一种称作接口(interface)的类,在这个类中,所有的方法都是抽象的,也就是说它们都只有说明没有定义,由实现该接口的类来提供方法的具体实现。 一个接口,多个方法 3.5.1 定义接口 [public] interface 接口名 [extends 父接口名列表]{ [static| final] 类型 最终变量名=value; //常量名 ……; 返回类型 方法名([参数表]); //抽象方法说明; ……;}
3.5.2 实现接口 类实现接口的格式为: 修饰符 class 类名 extends 父类 implements 接口名列表 { ……} 在类体的定义中,可以使用接口中的常量,并且必须实现接口中的方法。 例子 P86 一个类可以实现多个接口,可以实现“多重继承”。 3.5.3 接口中的常量 在接口中可定义常量,作为实现该类的所有类的共享变量。
3.5.4 接口继承 当一个类实现派生接口时,必须实现所有接口与派生接口的方法。 例子 P88 接口同样可以作为类型。 当接口可以作为类型时,其行为和类作为类型完全一样。 例子14 //interfaceDemo.java interface one { double A=30.0; void add(int n); void subtract(int n); double getValue(); void setValue(int n); }
class class1 implements one { double num=50.0; public void add(int n) { num +=n; } public void subtract(int n) { num -=n; } public double getValue() { return num ; }
public void setValue(int n) { num=1; for (int i=1;i<=n;i++ ) { num *=i; } } } //end of class class1 class class2 implements one { double num=20; public void add(int n) { num +=(n+1)*n/2; } public void subtract(int n) { num -= (n+1)*n/2; }
public double getValue() { return num ; } public void setValue(int n) { num=1; for (int i=1;i<=n;i++ ) { num *=i; } } } //end of class class2 public class interfaceDemo { public static void main(String args[]){ double i;
one aObj=new class1(); i=aObj.getValue(); System.out.println( " The value in class1 is : " +i); if (i< aObj.A) { aObj.add(30); i=aObj.getValue(); System.out.println( " After call add method is : " +i); } else { aObj.subtract(30); i=aObj.getValue(); System.out.println( " After call subtract method is : " +i); }
aObj=new class2(); i=aObj.getValue(); System.out.println( " The value in class2 is : " +i); if (i< aObj.A) { aObj.add(30); i=aObj.getValue(); System.out.println( " After call add method is : " +i); } else { aObj.subtract(30); i=aObj.getValue(); System.out.println( " After call subtract method is : " +i); }
} } // end of class interfaceDemo 程序结果: The value in class1 is : 50.0 After call subtract method is : 20.0 The value in class2 is : 20.0 After call add method is : 485.0 实用例子: P89
3.6 包 包(package)是一组类的集合 Java本身提供了许多包,如java.io和java.lang,它们存放了一些基本类,如System和String。你可以为自己的几个相关的类创建一个包。 3.6.1 包的定义 package PackageName; 包的名称将决定它应放的不同路径 ,即目录名与包的名字完全一致.多级包具有层次结构. package pkg1[.pkg2[.pkg3]];
3.6.2 引用已定义过的包 为了使用已定义过的包,你必须使用引用命令import,你可以用以下三种方式引用包中的一个类: 1.在每一个类名前给出个包名: Shapes.Rectangle REET=new Shapes.Rectangle(10,20) 2.引用类本身: import Shapes.Reckargle; 3.引用整个包: import Shapes;
例子15 // packageDemo1.java package p1; class packageDemo1 { public int a; public void method() { System.out.println(""); } }
// packageDemo2.java package p1; class packageDemo2 { public static void main(String[] args) { packageDemo1 apackageDemo1=new packageDemo1(); apackageDemo1.method(); apackageDemo1.a=10; int a=apackageDemo1.a; System.out.println("packageDemo1的公共成员变量a= "+a); } }
例子16 package test; public class packageA { public int a; public packageA (int i) { a=i; } public void myprint() { System.out.println(a); } }
package test; public class packageB { public packageB () { } public static void main(String[] args) { packageA aObj=new packageA(20); aObj.myprint(); } }