Java基础之接口(interface)

接口 :实现多继承机制

格式:

[修饰符] interface 接口名[extends 父接口名列表]

{

​ 常量数据成员声明

​ 方法声明

}

修饰符:public和默认(public 修饰的接口是公共接口,可以被所有的类和接口使用;默认修饰符的接口只能被同一个包中的其他类和接口使用。)

父接口列表:接口具有继承性。多个父接口之间用逗号隔开。

常量数据成员声明:默认使用 public static final修饰,接口中的数据成员都是用final修饰的常量。(用大写字母命名),必须对数据成员***初始化***。

方法声明:可以定义静态方法,默认方法,抽象方法

  • 静态方法:以通过接口名直接调用,不需要在实现子类重写.
  • 默认方法:通过子类对象调用,一般默认方法无实现,子类可以重写,也可以不重写。

接口不能创建对象,没有构造方法

1.创建InterA接口

package InterfaceDemo;

public interface InterA {
	
	// 常量数据成员----默认public static final修饰,初始化。
	String name="Jim";
	
	// 方法声明----默认pulic abstract修饰,不实例化。
	public void eat();
	
	// 静态方法----public static修饰
	public static void teststatic() {
		System.out.println("接口中static修饰的静态方法: teststatic");
	}
	
	// 默认方法-----public default修饰
	public default void testdefault() {
		System.out.println("接口中default修饰的默认方法: testdefault");
	}
	
}

2.创建InterC接口

package InterfaceKey;

public interface InterC {
	//方法声明----默认pulic abstract修饰,不实例化。
	public void drink();
}

3.创建InterD接口

package InterfaceKey;

public interface InterD {
	//方法声明----默认pulic abstract修饰,不实例化。
	public void play();
}

4.创建InterB接口

package InterfaceKey;

/*
 * 	接口可以实现多继承机制
 * 
 * */
public interface InterB extends InterC,InterD {

	//常量数据成员----默认public static final修饰,初始化。
	int age=21;
		
	//方法声明----默认pulic abstract修饰,不实例化。
	public void sleep();

}

5.创建测试类Test

implements 关键字是实现接口的,一个类可以调用多个接口,用逗号隔开

package InterfaceKey;
/*
 * 
 * 	一个类可以实现多个接口
 * 		但是这个类要么是抽象类,要么重写实现接口中所有的方法。
 * 
 * */
public class Test implements InterA,InterB {

	@Override
	public void drink() {
		System.out.println("Test中重写的drink()");
		
	}

	@Override
	public void play() {
		System.out.println("Test中重写的play()");
		
	}

	@Override
	public void sleep() {
		System.out.println("Test中重写的sleep()");
		
	}

	@Override
	public void eat() {
		System.out.println("Test中重写的eat()");
		
	}
	
	// main方法测试
	public static void main(String[] args) {
		
		// 接口中的静态方法可以通过接口名直接访问
		// 子类中不需要重写接口中的静态方法
		InterA.teststatic();
		
		// 数据成员也可以通过接口名直接访问
		System.out.println("通过接口名直接访问数据成员name:"+InterA.name);
		
		System.out.println("通过接口名直接访问数据成员age:"+InterB.age);
		System.out.println("-------------------------");
		
		// 创建此类对象
		Test test = new Test();
		
		// 调用方法
		test.drink();
		test.eat();
		test.testdefault();//默认方法通过对象名调用
		// test.teststatic(); 接口中的静态方法,不能通过对象名调用,需要通过接口名调用InterA.teststatic();
		System.out.println(test.name);//接口中的静态常量数据成员可以通过对象名访问,系统提示,通过接口名调用更好
		System.out.println("---------------------");
		
		// 通过父接口名创建对象(多态:编译看左边,运行看右边)
		InterA inter = new Test();
		// 调用方法
		inter.eat();
		inter.testdefault();
		// inter.teststatic();接口中的静态方法,不能通过对象名调用
		System.out.println(inter.name);//系统提示,通过接口名调用更好
		
	}
}

运行结果:

接口中static修饰的静态方法: teststatic
通过接口名直接访问数据成员name:Jim
通过接口名直接访问数据成员age:21
-------------------------
Test中重写的drink()
Test中重写的eat()
接口中default修饰的默认方法: testdefault
Jim
---------------------
Test中重写的eat()
接口中default修饰的默认方法: testdefault
Jim
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值