public class 类名{ }
public interface 接口名{ }
推荐书:《人月神话》《设计模式》
一、类:class 类别
①类与类之间是继承 extends
概念:代码中定义的类,用来表示一个类别,根据一类事物定义的模版,模版中包含这类食物具有的属性、特征、行为、功能等 也就是 属性 和 方法
二、抽象类:
①类可以继承抽象类
②抽象类可以实现接口
三、接口:interface【存在的意义:为后续开发扩展】
①类实现接口 implements
② 接口与接口之间是继承 extends
1、格式: public interface 接口名{ }
2、内容:接口中所有的成员都是默认公开的 public 修饰符
①属性:默认使用public static final 修饰符 修饰符
②static 静态的 唯一的 修饰的属性可以使用 类名 / 接口名调用
③final 最终的 不变的 修饰的属性在初始化赋值之后,不可以改变值
3、方法:
①抽象方法:没有大括号的方法,这个方法只有结构,没有方法体 -> 接口最重要的结构
②默认方法:使用default 修饰符 修饰的方法,可以被接口的子类所继承
③静态方法:使用static 修饰符 修饰的方法,可以被接口名直接调用
4、接口的特性:
①接口是否可以直接创建对象?
接口具有抽象的方法,接口也是抽象的结构,抽象的结构不能创建具体的对象出来
如果接口能创建对象,接口创建的对象调用抽象方法时,抽象方法没有方法执行
②接口的使用方式:
将接口看成一个类的模版,使用自己定义的类实现接口,形成了 类继承接口的形式。
- 创建一个新的类 实现 接口 :public class 类名 implements 接口名{ }
- 重写接口中的所有抽象方法 为具体方法
- 一个类可以实现多个接口
- 实现了接口的类 可以看作接口的一种具体实现
③为什么需要接口:
- 类:不完全抽象
属性:抽象的,定义类只可以定义类的哪些属性,而不能定义每个属性都是什么值
方法:不是抽象的,方法中逻辑实现是固定不变的
- 接口:
属性:static final 修饰 是非常具体的
方法:接口具备抽象方法,方法是抽象的
- 类和接口 都是一种数据类型
- 例子:
动物类:吃的方法 狮子类与牛类继承动物类的吃
植物类: 食人花不能继承动物的吃,而植物类没有吃的方法给他继承
根据吃这个行为进行统计,统计有多少生物具有吃的行为?
解决办法:
定义一个吃的接口,让动物类和食人花类都实现这个接口,重写吃的方法。
吃的接口可以作为动物类和食人花类的 “ 父类 / 父接口 ”
接口是可以以行为进行分类的,我们在发现很多类都具备相同的行为,那么我们就可以定义一个接口,将这些行为在接口中进行抽象设计,让这些类都实现这个接口,这样,我们就可以同一对这些类进行操作了
public interface Lock {
public static final int id = 10;
public static final String name = "门锁";
String color = "黑色";
//方法
public void open();
public void close();
public static void test(){
System.out.println("接口静态方法 测试");
}
public default void test2(){
System.out.println("接口默认方法 测试");
}
}
5、例子:ActionListener 动作监听器接口
6、以5G为例:
单纯将5G是一个通信协议,是一种规范,支持5G的设备以及程序需要按照5G的规范来开发
5G:抽象的设计,没有具体实现的内容
5G手机:根据抽象设计完成的具体实现
门锁代码示例
package lfx250705.newDoor;
public class Door {
//锁:未知的 需要一把可以装在门上的锁
Lock mylock;//定义一个锁的接口变量名mylock
public void openDoor() {
mylock.unlock();
}
public void closeDoor() {
mylock.lock();
}
}
package lfx250705.newDoor;
//锁的接口 是一个锁的行为的抽象设计结构
public interface Lock {
//定义好座位一把锁锁需要具备的功能
void unlock();
void lock();
}
package lfx250705.newDoor.locks;
import lfx250705.newDoor.Lock;
public class FaceIDLock implements Lock {
public void unlock(){
System.out.println("使用人脸打开门,门开了");
}
public void lock(){
System.out.println("使用人脸关上门,门关了");
}
}
package lfx250705.newDoor.locks;
import lfx250705.newDoor.Lock;
//KeyLock是一个具体实现的锁类 可以用来创建对象,并且也是基于Lock接口实现的
//那么就可以适配Door类中mylock
public class KeyLock implements Lock {
public void unlock(){
System.out.println("使用钥匙打开门,门开了");
}
public void lock(){
System.out.println("使用钥匙关上门,门关了");
}
}
package lfx250705.newDoor.locks;
import lfx250705.newDoor.Lock;
public class PasswordLock implements Lock {
public void unlock(){
System.out.println("使用密码打开门,门开了");
}
public void lock(){
System.out.println("使用密码关上门,门关了");
}
}
package lfx250705.newDoor;
import lfx250705.newDoor.locks.FaceIDLock;
import lfx250705.newDoor.locks.KeyLock;
import lfx250705.newDoor.locks.PasswordLock;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//主函数测试
//这是我们购买的门对象
Door door = new Door();
//我们购买的门锁对象
KeyLock keyLock = new KeyLock();
PasswordLock passwordLock = new PasswordLock();
FaceIDLock faceIDLock = new FaceIDLock();
//选择三把锁中的一把作为门锁
door.mylock = keyLock;
Scanner sc = new Scanner(System.in);
System.out.println("请选择门锁:1.密码锁 2.人脸锁 3.钥匙锁");
switch (sc.nextInt()){
case 1:
door.mylock = passwordLock;
break;
case 2:
door.mylock = faceIDLock;
break;
case 3:
door.mylock = keyLock;
break;
default:
System.out.println("输入错误");
return;
}
System.out.println("请选择操作:1.打开门 2.关闭门");
while (sc.hasNext()) {
switch (sc.nextInt()) {
case 1:
door.openDoor();
break;
case 2:
door.closeDoor();
break;
default:
System.out.println("输入错误");
}
}
}
}

1299

被折叠的 条评论
为什么被折叠?



