38--接口一

开发中有时必须从几个类中派生出一个子类,继承它们所有的属性和方 法。但是,Java不支持多重继承。接口,就可以得到多重继承的效果。解决了java类单继承的局限问题。接口的本质是契约,标准,规范。制定好后大家都 要遵守。
接口是由全局常量公共的抽象方法组成的(JDK1.7以及之前的版本)。
接口和类是并列关系,或者可以理解为一种特殊的类。从本质上讲, 接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义 (JDK7.0及之前),而没有变量和方法的实现。
接口的定义格式:
public interface 接口名称{
全局常量;
抽象方法;’
}
实例1:

Interface  A{
    
    
	public  static  final String NAME=”齐老师”;
	public  abstract  void print();
	public  abstract   String  getInfo();
}

实例2:

Interface A{
    
    
	String NAME=”齐老师”;//相当于public  static  final String NAME=”齐老师”;
	void print();//相当于public  abstract  void print();
	String getInfo();//相当于public  abstract   String  getInfo();
}

※注意:
用interface来定义。
在接口中如果不写public,则也是public访问权限。
在很多的java程序中,经常看到编写接口时省略了public ,也许有人认为它的访问权限是default,实际是这是错误的,不管写与不写,接口中的方法永远是public。
接口中没有构造器。
接口采用多继承机制。
接口的实现:
实例:

interface A{
    
    
	public  static  final String NAME=”齐老师”;
	public  abstract  void print();
	public  abstract   String  getInfo();
}
interface B{
    
    
	public void say();
}
class X implements A,B{
    
    
	//实现接口A中的print()方法
	public    void print(){
    
    
	System.out.print(“名称:”+NAME);
}
    //实现接口A中的getInfo方法
public    String  getInfo(){
    
    
		return “Hello”;
}
//实现接口B中的say()方法
public  void  say(){
    
    
	System.out.print(“Hello world”);
}

}
public class InterfaceDemo{
    
    
	public static void main(String[] args){
    
    
		X x= new X();
		x.say();
		x.print();
	}
}

继承类且实现接口:
定义Java类的语法格式:先写extends,后写implements
一个类可以实现多个接口,接口也可以继承其它接口。
实现接口的类中必须提供接口中所有方法的具体实现内容,方可实 例化。否则,仍为抽象类。
与继承关系类似,接口与实现类之间存在多态性 。
格式:class 子类 extends 类 implements 接口A, 接口B,……{}
实例:

interface A{
    
    
	public  static  final String NAME="齐老师";
	public  abstract  void print();
	public  abstract   String  getInfo();
}
abstract class B{
    
    
	public abstract void say();
}
// 类 继承 B抽象类,且实现 接口A
class X extends B implements A{
    
    
	//实现接口A中的print()方法
	public    void print(){
    
    
	System.out.println("名称:"+NAME);
	}
	//实现接口A中的getInfo()方法
	public    String  getInfo(){
    
    
		return "Hello";
	}
	//实现抽象类B中的sa()方法
	public  void  say(){
    
    
	System.out.println("Hello world");
	}

}
public class InterfaceDemo1{
    
    
	public static void main(String[] args){
    
    
		X x= new X();
		x.say();
		x.print();
}
}

接口的其它应用方式
实例:创建接口A 的匿名实现类非匿名对象

package com.qwy;

public class TestInterface {
    
    
	public static void main(String[] args) {
    
    
		//创建接口A 的匿名实现类非匿名对象
		A a= new A(){
    
    
			public void a() {
    
    
				System.out.println("TestInterface.main(...).new A() {...}.a()");
			}
		};
		//调用a接口的对象
		a.a();
	}
}
interface A{
    
    
	void a();
}

实例:创建了接口的匿名实现类的匿名对象

package com.qwy;

public class TestInterface {
    
    
	public static void main(String[] args) {
    
    
		
		Person person= new Person();
		//创建了接口的匿名实现类的匿名对象
		person.run(new A(){
    
    

			@Override
			public void a() {
    
    
				System.out.println("TestInterface.main(...).new A() {...}.a()");
			}
			
		});
	}
}

class Person{
    
    
	void run(A a){
    
    
		a.a();
	};
}
interface A{
    
    
	void a();
}


实例:接口的非匿名实现类的非匿名对象(常用)

package com.qwy;

public class TestInterface {
    
    
	public static void main(String[] args) {
    
    
		
		A person= new Person();
		//创建了接口的非匿名实现类的非匿名对象
		person.a();
	}
}

class Person implements A{
    
    
	@Override
	public void a() {
    
    
		System.out.println("Person.a()");	
	}	

}
interface A{
    
    
	void a();
}

这里没有遵循java中标识符定义规范,只是为了说明问题,大家见谅。

猜你喜欢

转载自blog.csdn.net/qwy715229258163/article/details/114701450
38