Java -OOP - Interface
接口
-
接口: interface
- 监听器都是接口
- 格式: public interface 接口名
-
接口与类
-
类: 属性 方法
-
接口:
-
属性:
- 默认:final(最终的-不可变) 常量
-
static(静态的 - 唯一) 属于类 直接由类名调用
-
方法:抽象方法
接口中的方法没有方法体
-
package com.draw.zyf1229;
public interface InterfaceTest{
/**
* ERR: Variable 'name' might not have been initialized
* 默认: 1:final 常量
* 2: static 静态的
*/
static final String NAME="";
int age=20;
/**
* ERR: Interface abstract methods cannot have body
* 接口中的方法没有方法体
*/
public abstract void read();
}
- 接口不能直接创建对象
- 接口还是可以作为一种类型存在 可以声明但是不创建对象
- 作为属性类型 参数类型 返回值类型
使用接口:
- 关键字: implements 实现
- 一个类去继承一个接口 并实现接口的方法
- 创建一个类 实现 接口
- 重写接口中所有的方法
具体应用: 监听器
- 为什么需要使用接口?
- 点击按钮之后的动作,在你写按钮这个类的时候不明确
- JButton 被点击动作发生时 之后 需要调用第三方使用者想要执行的代码
- 抽象:
-
类: 相对于对象抽象
- 类的方法是具体
- 类是不完全抽象的
-
遇到一些行为功能需要抽象化处理时,类就很难做到了
-
动物类: 吃:
老虎: 吃 肉
昆虫: 吃 树叶
植物类:
食人花:吃 昆虫
有吃这个行为的:
所有有吃这个行为的都来实现吃这个接口 重写接口中吃的方法(强制)
类- 接口=完成对一类事物的属性以及行为 抽象
买票:
路径选择:
长沙 -- 北京 :
飞机:
直达: CS - BJ
转成: CS - GZ - CD - ZZ - BJ
package com.draw.zyf1229;
public class ClassTest{
/**
* Variable 'name' might not have been initialized
*/
static final String NAME = "";
int age;
static int num = 100;
/**
* ERR: 'InterfaceTest' is abstract; cannot be instantiated
* instantiated: 实例化对象
*/
// InterfaceTest ift=new InterfaceTest();
InterfaceTest ift;
public void userRead(InterfaceTest ift){
this.ift = ift;
}
public static void main(String[] args){
// 由static 修饰的变量方法可以在static 方法中调用
ClassTest ct = new ClassTest ();
ct.num = 300;
ct.age = 20;
ClassTest.num = 200;
ClassTest ct1 = new ClassTest ();
ct1.num = 600;
ct1.age = 30;
System.out.println ("ct:" + ct.age);
System.out.println ("ct1:" + ct1.age);
System.out.println (num);
System.out.println (ct.num);
System.out.println (ClassTest.num);
}
}
interface ToBj{
void cstobj();
}
class CS_TO_BJ{
/**
* 声明去北京的属性变量名
*/
ToBj tobj; // 接下来要赋值为接口的实现类对象
/**
* 调用接口设定的方法
*/
public void csTobj(){
tobj.cstobj ();
}
// public void csTobj(){
// System.out.println ("长沙---西安");
// System.out.println ("西安---郑州");
// System.out.println ("郑州---北京");
// }
public static void main(String[] args){
CS_TO_BJ ctb = new CS_TO_BJ ();
// 先确定策略
ctb.tobj = new ToBJ_01 ();
ctb.csTobj ();
ctb.tobj = new ToBJ_02 ();
ctb.csTobj ();
ctb.tobj = new ToBJ_03 ();
ctb.csTobj ();
}
}
/**
* 去北京的不同方式的实现
*/
class ToBJ_01 implements ToBj{
@Override
public void cstobj(){
System.out.println ("长沙---西安");
System.out.println ("西安---北京");
}
}
class ToBJ_02 implements ToBj{
@Override
public void cstobj(){
System.out.println ("长沙---郑州");
System.out.println ("郑州---北京");
}
}
class ToBJ_03 implements ToBj{
@Override
public void cstobj(){
System.out.println ("长沙---北京");
}
}

浙公网安备 33010602011771号