1.接口是什么?
2.static,final的用法
3.接口的用法
-1.接口是什么?
接口:interface,以行为做分类,给出抽象方法
ex:Actionlistener就是一个接口,其中的方法是抽象的,要想具体化方法,需要再创建一个类,去重写方法,改()为{}
class与interface
class以共有的属性,行为分类
ex:动物类-都有名字(属性),都会吃东西(行为)
植物类-都有名字(属性),都可能会被伤害(行为)
植物有的可以吃东西,食人花等,但这不是植物类共有的行为,所以吃东西就不是植物类给它的行为
若用interface分类,以吃东西为分类标准,就可以先抽象出吃东西的方法,在具体的把方法给到食人花
-2.static,final的用法
接口中所有的属性变量,都默认由static final修饰
static:静态的,唯一的
-修饰属性:属性属于类,可以由类名直接调用,属性只会在内存存在一份,值是可以变的
由类名直接调用static修饰的方法
Math类中的方法都由static修饰
public class Test {
public static void main(String[]args){
double n=Math.sin(3);
System.out.println(n);
}
}
属性只会在内存中存在一份,且值是可变的
class Test2{
static String name;
public static void main(String[]args){
Test2.name="zhang";
//当只写 Test2.name="zhang";这行代码时输出zhang
Test2.name="chen";
//当写了此行代码时,只输出chen
System.out.println(Test2.name);
}
}
-修饰方法:类名可以直接调用,不能直接使用本类的成员属性变量
class Test3{
int num;
static String name;
static void study(){
System.out.println("学习过");
}
public static void main(String[]args){
Test3.study();
Test3.name="zhang";
Test3.num=9;
System.out.println(Test3.name);
System.out.println(Test3.num);
在上边的代码中num是会报错的
也就是说,类名不可以调用不是static修饰的属性或方法
需要创建类的对象,然后由对象调用
fianl:最终的,不变的
-修饰属性:定义常量,必须初始化赋值,之后值不变
-修饰方法:不能被子类重写
-修饰类:不能有子类,不能被继承
-3.接口的用法
-1.格式:interface. 接口名{ }
-2.接口中的方法:抽象方法,没有方法体
也可以定义静态的,默认的方法,有方法体
实例演示
1.门与锁
public interface Lock {
//接口中的成员方法只能是抽象方法 所有的方法都默认是public abstract
void open();
void close();}
public class Door {
Lock lock;
//接口不可以创建对象,但是可以声明变量
public void open(){
lock.open();
}
public void close(){
lock.close();
}
public class Facelock implements Lock{
public void open() {
System.out.println("人脸识别成功,开门");
}
public void close() {
System.out.println("人脸识别成功,关门");
}
}
public class IDlock implements Lock{
public void open() {
System.out.println("IC卡识别正确,开门");
}
public void close() {
System.out.println("IC卡识别正确,关门");
}
}
public static void main(String[]args){
Door door1=new Door();
//先给Lock一个初始化对象
//创建了lock接口的子类对象
IDlock idlock=new IDlock();
//装配锁
door1.lock=idlock;
door1.open();
door1.close();
//换一把锁
Facelock facelock=new Facelock();
door1.lock=facelock;
door1.open();
door1.close();
2.深圳去北京路线
public interface SZtoBJ {
void SZgotoBJ();
}
public class Traveler {
//由接口作为一个参数类型定义一个参数
public void gotoBJ(SZtoBJ sztobj){
sztobj.SZgotoBJ();
}
public class SZtoBJ1 implements SZtoBJ{
public void SZgotoBJ() {
System.out.println("深圳出发");
System.out.println("经停洛阳");
System.out.println("到达北京");
}}
class SZtoBJ2 implements SZtoBJ{
public void SZgotoBJ() {
System.out.println("深圳出发");
System.out.println("经停江苏");
System.out.println("到达北京");
}
}
class SZtoBJ3 implements SZtoBJ{
public void SZgotoBJ() {
System.out.println("深圳出发");
System.out.println("经停武汉");
System.out.println("到达北京");
}
}
public static void main(String[]args){
Traveler traveler1=new Traveler();
SZtoBJ1 bj1=new SZtoBJ1();
SZtoBJ2 bj2=new SZtoBJ2();
SZtoBJ3 bj3=new SZtoBJ3();
traveler1.gotoBJ(bj1);
traveler1.gotoBJ(bj2);
traveler1.gotoBJ(bj3);
}