第6章 接口与实现
1.接口
接口就是interface来定义的一个接口,接口的定义和类的定义很相似。分为接口声明和接口体
(1)接口声明:interface 接口的名字;
(2)接口体:接口体中包含常量的声明(没有变量)和抽象方法两部分。接口体中只有抽象方法,
没有普通方法,而且接口体中所有的常量的访问权限一定是public,而且是static常量(允许
省略public、final和static修饰符),所有的抽象方法的访问权限一定都是public(允许省略
public abstract修饰符),如:
interface printable{
public final static int MAX=10;//等价于:int MAX=100;
public abstract void add();//等价于:void add();
public abstract float sum(float x);//等价于:float sum(float x);
}
2.实现接口
(1)在java中,接口由类来实现以便使用接口中的方法,一个类需要在类声明中使用关键字
implements声明该类实现一个或多个接口,如果事先多个接口,用‘,’隔开接口名,如:
class 类名 implements 接口名1,接口名2....
(2)重写接口中的方法
如果一个非抽象类实现了某个接口,那么这个类必须重写这个接口中所有方法。需要注意的是,
由于接口的方法一定是public abstract方法,所以类在重写接口方法时不仅要去掉abstract修饰符
给出方法体,而且方法的访问权限一定要明显的用public修饰(否则就降低了访问权限,这是
不允许的)
如果一个类声明实现一个接口,但没有重写接口中的所有方法,那么这个类必须是抽象类,
也即是说抽象类既可以重写接口中的方法也可以直接拥有接口中的方法。
(3)接口的细节说明:
程序可以用接口名访问接口中的常量。
3.理解接口
4.接口的UML图
顶部是第一层:接口的名字必须是斜体字形。
第二层是常量层
第三层是方法层
5.接口回调
接口回调是指:可以实现某一接口的类创建对象的引用赋值给接口声明的接口变量,那么该
接口变量就可以调用被类实现的接口方法。
6.接口与多态
7.接口参数
8.abstract类与接口的比较
abstract类和接口都可以有abstract方法
接口中只可以有常量,不能有变量,而abstract类中既可以有常量还可以有变量。
abstract类中也可以有非abstract方法,接口不可以。
9.面向接口编程
10.应用举例
11.小结
1.接口的接口体中只有常量和abstract方法。
2.和类一样,接口也是Java中一种重要的引用型数据类型,接口变量中只能存放实现该接口的类
的实例(对象)的引用。
3.当接口变量中存放了实现接口的类的对象的引用后,接口变量就可以调用类实现的接口方法,
这一过程被称为接口回调。
4.和子类体现多态类似,由接口产生的多态是指不同类在实现同一个接口是可能具有不同
的实现方式。
5.在使用多态设计程序时,要熟练运用接口回调技术以及编程的思想。“开-闭原则”;。
第7章 内部类与异常类
1.内部类
(1)内部类的外嵌成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。
(2)内部类的类体中不可以声明类变量和类方法。外嵌类的类体中可以使用内部类声明内部类
声明对象,作为外嵌类的成员。
(3)内部类仅供他的外嵌类使用,其他类不可以用某个类的内部类声明对象。
Java编译器生成的内部类的字节码文件的名字和通常的类不同,内部类对应的字节码文件的名字
格式是“外嵌类名$内部类名”。
内部类仅仅实现的类的一小部分功能:
不能声明类变量和类方法。(类变量就是静态变量。)其他类不能用该类声明对象,只能供他的
外嵌类使用。
内部类可以被声明为static内部类,类是一种数据类型,那么static内部类就是外嵌类的一种静态
数据类型,这样一来,程序就可以在其他类中使用static内部类来创建对象了。
2.匿名类
没有显式的声明一个类的子类,而又想用子类创建一个对象,那么就用匿名类。
Java允许我们直接使用一个类的子类类体创建一个子类对象,也就是说,创建子类对象时,除了
使用父类的构造方法外还有类体,此类体被认为是一个子类去掉声明后的类体。称作匿名类。
匿名类特点:
(1)匿名类可以继承父类的方法也可以重写父类的方法。
(2)使用匿名类时,必然在某个类中直接用匿名类创建对象,因此匿名类一定是内部类。
(3)匿名类可以访问外嵌类的成员变量和方法,匿名类的类体不可以声明为static成员变量和方法
(4)由于匿名类是一个子类,但没有类名,所以用匿名类创建对象时,要直接使用父类的构造方法
3.异常类
4.断言
5.应用举例
6.小结
1.String类
(1)构造字符串对象:
1.常量对象
1)s=new String("we are students");
char a[]={'0','1','2','3','4','5'}
String s=new String(a,2,4);{其中a表示数组名,2表示数组起始位置,4表示移动4个数。}
相当于String s=new String("2345");
(2)String类的常用方法
1.public int length();获取一个字符串长度。例:String china=“中国”,a=china.length();则:a=5;
2.public boolean equals(String s);调用equals(String s)方法比较当前字符串对象的实体是否与参数S指定的字符串的实体相同,例:String a=new String("天道酬勤"); String b=new String("天道酬勤"); a.equals(b)为true;
3.public boolean startsWith(String s);public boolean endsWith(String s)方法字符串对象调用startsWith(String s)方法,判断当前字符串对象的前缀是否是参数s指定的字符串。例:String tom="天气预报";tom.startsWith("天气")的值是true;
4.public int compareTo(String s)方法;字符串对象可以使用String中的compareTo(String s)方法,按字典中的顺序比较字符串大小(ASCII码大小顺序)
5.public boolean contains(String s) 字符串调用contains方法判断当前字符串是否含有参数指定的字符串。
6.public int indexof(String s)字符串的索引位置从0开始,并返回首次出现S的索引位置。
7.public String substring(int startpoint)字符串对象调用该方法获得一个当前字符串的子串,该子串是从当前字符串startpoint处截取到最后所得到的字符串。
8.public String trim();一个字符串s通过调用得到一个字符串对象,该字符串对象是s去掉前后空格后的字符串。