java 接口
第九章 接口
1.接口的规范:
接口中只能够有常量和抽象方法,不能够有变量、初始化块、构造方法。
(1)定义接口
修饰符 interface 接口名称 {
//声明变量
数据类型 变量名;
//声明抽象方法
返回类型 方法名(参数);
}
接口中的变量会被自动认为是,公共的、静态的、最终的变量。
public interface MyInterface {
int a=1001;
public void display();
}
这里的a被定义为静态、公共的,所以在使用的时候是不能再次进行赋值的。
要点:
接口的修饰符只能为public或者是缺省的修饰符
在接口中,接口定义的方法都为抽象方法,他们自动的设置为public的。
(2)实现接口
实现接口需要实现接口中所有的抽象方法,接口的实现是指具体实现接口的类。
Class 类名 implements 接口1,接口2{
方法1(){.......}
}
由关键字表示实现的接口,多个接口之间用逗号隔开。实现接口需要注意以下几点:
1. 为接口中所有方法提供具体的实现
2. 必须遵守重写的规范
3. 保持相同的返回类型
展示代码:
public class Manager {
public static void main(String[] args){
Manager m=new Manager();
Otest test=m.new Otest();
System.out.println("3+5="+test.add(3, 5));
System.out.println("5-3="+test.sub(5, 3));
System.out.println("3*5="+test.mul(3, 5));
}
interface Oadd{
double add(double a,double b);
}
nterface Osub{
double sub(double a,double b);
}
interface Omul{
double mul(double a,double b);
}
interface Oumul{
double umul(double a,double b);
}
class Otest implements Oadd,Osub,Omul,Oumul{
public double add(double a,double b){
return a+b;
}
public double sub(double a,double b){
return a-b;
}
public double mul(double a,double b){
return a*b;
}
public double umul(double a,double b){
if(b==0) {System.out.println("分母不能为零");
return 0;
}
else return a/b;
}
}
}
抽象类实现接口
当抽象类实现接口的时候,可以不用实现接口中全部的方法。
-----定义了一个Anmial接口
interface Anmial {
public void run();
public void action();
public void eat();
}
-----定义了一个People抽象类--实现Anmial接口(可以只实现部分接口中的方法)
public abstract class People implements Anmial{
public void run() {
System.out.println("人类正在跑");
}
}
-----定义一个Student类继承抽象类People
-----这是要将所有的没有是实现的方法实现(包括接口中的)
public class Student extends People {
@Override
public void action() {
// TODO Auto-generated method stub
System.out.println("student实现动作应激性的功能");
}
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("student中实现吃的功能");
}
}
2.接口的引用
在java中可以建立接口类型的引用变量,接口的引用变量可以存储一个指向对象的值的引用,而这个对象可以是任何实现该接口的实例,对象的方法必须是类中非抽象方法。
package test01;
public class Manager {
public static void main(String[] args){
Manager m=new Manager();
Otest test=m.new Otest();
System.out.println("3+5="+test.add(3, 5));
System.out.println("5-3="+test.sub(5, 3));
System.out.println("3*5="+test.mul(3, 5));
Oadd al=test;//接口的引用,调用该接口中的方法
System.out.println("3+5="+al.add(3, 5));
}
interface Oadd{
double add(double a,double b);
}
interface Osub{
double sub(double a,double b);
}
interface Omul{
double mul(double a,double b);
}
interface Oumul{
double umul(double a,double b);
}
class Otest implements Oadd,Osub,Omul,Oumul{
public double add(double a,double b){
return a+b;
}
public double sub(double a,double b){
return a-b;
}
public double mul(double a,double b){
return a*b;
}
public double umul(double a,double b){
if(b==0) {System.out.println("分母不能为零");
return 0;
}
else return a/b;
}
}
}
3.内部类
内部类就是定义于类内部的类。
内部类是一个非常有用的机制,通过内部类的定义,程序员将一些逻辑上相关的类组织在一起,通过内部类的使用可以很好的控制内部类的可见性。
(1)匿名内部类
所谓匿名内部类,就是没有名称的内部类
如果匿名类继承或实现的接口,自己有带参数的构造方法,没有无参数的构造方法,该用如下形式创建此匿名类
父类名 对象名=new 父类名(有时候为接口)(参数){
//实现接口的方法等等
};
public class MyFile {
public static void main(String[] args) {
Oadd add=new Oadd() {
public double add(double a,double b) {
return a+b;
}
};
System.out.println(add.add(1, 2));
}
}
4.接口的继承
接口的集成在简单的程序中可能会用不到,但是在复杂的程序中会用到,而且也具有很大的便利性。在这里知识大体上讲述一下。
interface Anmial extends Biology{
public void run();
public void eat();
}
具体例子就是这样(对了,接口支持多继承)