实践六、接口与实现
1、Com接口定义了常量MAX、on、sum抽象方法、默认的max方法、静态方法f和私有的output Java方法。AAA类实现了Com接口
interface Com { //声明接口Com
public static final int MAX = 100; //等价写法:int MAX=100;
public abstract void on(); //等价写法:void on();
public abstract float sum(float x ,float y);//等价写法:float sum(float x ,float y);
public default int max(int a,int b) { //声明为默认方法
outPutJava(); //调用接口中的private方法
return a>b?a:b;
}
public static void f() { //声明为静态方法
System.out.println("注意是从Java SE 8开始的");
}
private void outPutJava(){
System.out.println("Java");
}
}
class AAA implements Com {
@Override
public void on() {
System.out.println("打开电视");
}
@Override
public float sum(float x, float y) {
return x+y;
}
}
public class test {
public static void main(String args[]) {
AAA a = new AAA();
System.out.println("接口中的常量"+Com.MAX); //访问接口中的常量MAX
System.out.println("调用on方法(重写的):");
a.on();
System.out.println("调用sum方法(重写的):"+a.sum(12,18));
System.out.println("调用接口提供的default方法"+a.max(12,78));
Com.f(); } //访问接口中的静态方法f
}
运行结果:
接口中的常量100
调用on方法(重写的):
打开电视
调用sum方法(重写的):30.0
Java
调用接口提供的default方法78
注意是从Java SE 8开始的
2、使用接口回调技术
interface ShowMessage {//声明接口
void 显示商标(String s);
default void outPutStart(){
System.out.println("********");
}
}
class TV implements ShowMessage {
public void 显示商标(String s) {
System.out.println("tvtvtvtv");
System.out.println(s);
System.out.println("tvtvtvtv");
}
}
class PC implements ShowMessage {
public void 显示商标(String s) {
System.out.println("pcpcpcpc");
System.out.println(s);
System.out.println("pcpcpcpc");
}
}
public class text {
public static void main(String args[]) {
ShowMessage sm=new TV(); //声明接口变量存放对象的引用
sm.显示商标("长城牌电视机"); //接口回调。
sm=new PC(); //接口变量中存放对象的引用
sm.outPutStart();
sm.显示商标("华为个人电脑"); //接口回调
sm.outPutStart();
}
}
运行结果:
tvtvtvtv
长城牌电视机
tvtvtvtv
********
pcpcpcpc
华为个人电脑
pcpcpcpc
********
3、将6题改为匿名内部类的形式
interface ShowMessage {//声明接口
void 显示商标(String s);
default void outPutStart(){
System.out.println("********");
}
}
class PC implements ShowMessage {
public void 显示商标(String s) {
System.out.println("pcpcpcpc");
System.out.println(s);
System.out.println("pcpcpcpc");
}
}
public class text {
public static void main(String args[]) {
ShowMessage sm=new ShowMessage() {
@Override
public void 显示商标(String s) {
System.out.println("tvtvtvtv");
System.out.println(s);
System.out.println("tvtvtvtv");
}
}; //声明接口变量存放对象的引用
sm.显示商标("长城牌电视机"); //接口回调。
sm=new PC(); //接口变量中存放对象的引用
sm.outPutStart();
sm.显示商标("华为个人电脑"); //接口回调
sm.outPutStart();
}
}
4、简化7题
interface ShowMessage {//声明接口
void 显示商标(String s);
default void outPutStart(){
System.out.println("********");
}
}
class PC implements ShowMessage {
public void 显示商标(String s) {
System.out.println("pcpcpcpc");
System.out.println(s);
System.out.println("pcpcpcpc");
}
}
public class text {
public static void main(String args[]) {
ShowMessage sm=(String s) ->{
System.out.println("tvtvtvtv");
System.out.println(s);
System.out.println("tvtvtvtv");
}; //声明接口变量存放对象的引用
sm.显示商标("长城牌电视机"); //接口回调。
sm=new PC(); //接口变量中存放对象的引用
sm.outPutStart();
sm.显示商标("华为个人电脑"); //接口回调
sm.outPutStart();
}
}
5、
interface ShowMessage {//声明接口
void 显示商标(String s);
default void outPutStart(){
System.out.println("********");
}
}
public class text {
public static void main(String args[]) {
ShowMessage sm=(String s) ->{
System.out.println("tvtvtvtv");
System.out.println(s);
System.out.println("tvtvtvtv");
}; //声明接口变量存放对象的引用
sm.显示商标("长城牌电视机"); //接口回调。
sm=(String s)-> {
System.out.println("pcpcpcpc");
System.out.println(s);
System.out.println("pcpcpcpc");
}; //接口变量中存放对象的引用
sm.outPutStart();
sm.显示商标("华为个人电脑"); //接口回调
sm.outPutStart();
}
}
6、接口参数:方法的参数是接口类型
interface SpeakHello {
void speakHello();
}
class Chinese implements SpeakHello {
public void speakHello() {
System.out.println("中国人习惯问候语:你好,吃饭了吗? ");
}
}
class KindHello {
public void lookHello( SpeakHello hello) { //接口SpeakHello类型变量hello做参数
hello.speakHello(); //接口回调
}
}
public class test {
public static void main(String args[]) {
KindHello a = new KindHello();
Chinese ccc = new Chinese();
a.lookHello(ccc );
a.lookHello(new SpeakHello(){
public void speakHello() {
System.out.println("英国人习惯问候语:你好,天气不错 ");
}});
a.lookHello( ()->{
System.out.println("码农习惯问候语:no bug");} );//向参数传递Lambda表达式的值
}
}
运行结果:
中国人习惯问候语:你好,吃饭了吗?
英国人习惯问候语:你好,天气不错
码农习惯问候语:no bug