JAVA接口与实现(初学笔记重点)

1、关键字:interface

interface Printable{
	public static final int MAX=100;  //等价 int MAX=100;
	public abstract void add();       //等价 void add();  
	public abstract int sum(int a,int b); 
}

接口体中包含常量和抽象方法。常量的访问权限一定是public,而且是static常量(允许省略public、static、final),抽象方法的访问权限也一定是public(允许省略public abstract)

2、接口实现

关键字:implements

如果一个非抽象类实现了某个接口,那么这个类必须重写这个接口中的所有方法,并且重写后的方法必须加上public修饰,否则降低了访问权限。如果一个抽象类实现了某个接口,那么这个类可以重写接口中的方法,也可以直接拥有接口的方法。

public  interface Computable {
	int MAX=100;
	 int f(int a);
}
public class China implements Computable{
	int number;
	public int  f(int a){
		int sum=0;
		for(int i=0;i<=a;i++){
			sum=sum+i;
		}
		return sum;
	}
}
public class Japan implements Computable {
	int number;
	public int f(int a){
		return a+MAX;
	}
}
public class example1 {
	public static void main(String[] args) {
		China zhang=new China();
		Japan liu=new Japan();
		zhang.number=12+Computable.MAX;
		liu.number=13+Computable.MAX;
		System.out.println("zhang的学号"+zhang.number+",zhang的求和结果:"+zhang.f(100));
		System.out.println("liu的学号"+liu.number+",liu的求和结果:"+liu.f(100));
	}
}
zhang的学号112,zhang的求和结果:5050
liu的学号113,liu的求和结果:200

3、接口回调

接口回调类似于继承中所讲的上转型对象调用子类重写的方法。

interface ShowMessage{
	void 显示商标(String s);
	
}
class TV implements ShowMessage{
	public void 显示商标(String s){
		System.out.println(s);
	}
}
class PC implements ShowMessage{
	public void 显示商标(String s){
		System.out.println(s);
	}
}
public class Example2 {

	public static void main(String[] args) {
		ShowMessage name;
		name=new TV();
		name.显示商标("长城牌电视机");
		name=new PC();
		name.显示商标("华为PC");
	}
}
长城牌电视机
华为PC

4、接口与多态

不同的类在实现同一个接口时可能具有不同的实现方法,那么接口变量在回调接口方法时就可能具有多种形态。

  interface CompurerAverage{
	  double getAverage(double a,double b);
  }
  class A implements CompurerAverage{
	  public double getAverage(double a,double b){
		  double aver =(a+b)/2;
		  return aver;
	  }
  }
  class B implements CompurerAverage{
	  public double getAverage(double a,double b){
		  double  aver=Math.sqrt(a*b);
		  return aver;
	  }
  }
public class example4 {
	public static void main(String[] args) {
		CompurerAverage Computer;
		Computer=new A();
		double a=2;
		double b=3;
		double result= Computer.getAverage(a, b);
		System.out.printf("%5.2f和%5.2f的算数平均值:%5.2f\n",a,b,result);//小数点后的数字表示保留小数点位数
		Computer=new B();
		 result=Computer.getAverage(a, b);
		System.out.printf("%5.2f和%5.2f的几何平均值:%5.2f\n",a,b,result);
	}
}
 2.00和 3.00的算数平均值: 2.50
 2.00和 3.00的几何平均值: 2.45

5、接口参数

如果一个方法的参数是接口类型,我们就可以将任意实现该接口的类的实例的引用传递给该接口类型,那么接口参数就可以回调实现的接口方法。

 interface SpeakHello{
	 void speakHello();
 }
 class ChineseSpeak implements SpeakHello{
	 public void speakHello(){
		 System.out.println("中国人习惯问候语:你好,吃饭了吗?");
	 }
 }
 class KindHello{
	 void kindSpeak(SpeakHello hello){
		 hello.speakHello();
	 }
 }
public class example5 {
	public static void main(String[] args) {
		KindHello kindhello=new KindHello();		
		kindhello.kindSpeak(new ChineseSpeak());
	}
}

6、abstract类与接口的比较

接口中只能有常量和abstract方法,如果某个问题不需要继承,只是需要若干个类给出某些重要的abstract方法的实现细节,就可以考虑用接口。

abstract类中可以有常量也可以有变量,既可以有abstract方法也可以有非abstract方法,如果一个问题除了需要重写父类的abstract类也需要继承父类的一些变量和非abstract方法时,可以考虑用abstract类。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值