当一个类没有什么具体实现的时候,我们通常会把这个类设计成抽象类
在打印图形例子中, 我们发现, 父类 Shape 中的 draw 方法好像并没有什么实际工作, 主要的绘制图形都是由 Shape
的各种子类的 draw 方法来完成的. 像这种没有实际工作的方法, 我们可以把它设计成一个 抽象方法(abstract
method), 包含抽象方法的类我们称为 抽象类(abstract class).
//抽象类
public abstract class Shape {
public int a;
public static int b ;
public void func() {
}
//抽象方法
abstract public void draw();
}
总结:
注意:抽象类也是类,内部可以包含普通方法和属性,甚至构造方法
生活当中的接口比比皆是,手机充电口,插头接口…
接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。
在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型
总结:
那么类与接口通过什么东西去进行绑定呢?
类与接口的关系使用 i m p l e m e n t s \color{red} { implements } implements 进行连接
实例:
请实现笔记本电脑使用USB鼠标、USB键盘的例子
- USB接口:包含打开设备、关闭设备功能
- 笔记本类:包含开机功能、关机功能、使用USB设备功能
- 鼠标类:实现USB接口,并具备点击功能
- 键盘类:实现USB接口,并具备输入功能
public interface USB {
void openDevice();
void closeDevice();
}
public class KeyBoard implements USB{
@Override
public void openDevice() {
System.out.println("打开键盘");
}
@Override
public void closeDevice() {
System.out.println("关闭键盘");
}
public void inPut() {
System.out.println("键盘输入");
}
}
public class Mouse implements USB{
@Override
public void openDevice() {
System.out.println("打开鼠标!");
}
@Override
public void closeDevice() {
System.out.println("关闭鼠标!");
}
public void click() {
System.out.println("鼠标点击");
}
}
public class Computer {
public void powerOn() {
System.out.println("打开笔记本电脑");
}
public void powerOff() {
System.out.println("关闭笔记本电脑");
}
public void useDevice(USB usb) {
usb.openDevice();
if (usb instanceof Mouse) {
Mouse mouse = (Mouse) usb;
mouse.click();
}else if(usb instanceof KeyBoard) {
KeyBoard keyBoard = (KeyBoard) usb;
keyBoard.inPut();
}
usb.closeDevice();
}
}
public class Test {
public static void main(String[] args) {
Computer computer = new Computer();
computer.powerOn();
computer.useDevice(new Mouse());
computer.useDevice(new KeyBoard());
computer.powerOff();
}
}
一个接口想要实现多个接口的功能
interface IA {
void funcA();
}
interface IB {
void funcB();
}
// 扩展功能
//IC 同时拥有 IA,IB 的功能
interface IC extends IA, IB {
void funcC();
}
class T implements IC{
@Override
public void funcA() {
}
@Override
public void funcB() {
}
@Override
public void funcC() {
}
}
两个学生的年龄比较
class Student implements Comparable<Student>{
String name;
int age;
double score;
public Student (String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", score=" + score +
'}';
}
@Override
public int compareTo(Student o) {
if (this.age>o.age){
return 1;
}else if (this.age ==o.age) {
return 0;
}else {
return -1;
}
}
}
public class Test {
public static void main(String[] args) {
Student student1 = new Student("小帅",12,59.9);
Student student2 =new Student("张三",19,99.9);
if (student1.compareTo(student2) > 0) {
System.out.println(student1.name+" 的年龄比"+student2.name+"大"+(student1.age-student2.age)+"岁");
}else if (student1.compareTo(student2)==0) {
System.out.println(student1.name + " 和" + student2.name + "一样");
}else {
System.out.println(student1.name + " 的年龄比" + student2.name + "小" + (student2.age - student1.age) + "岁");
}
}
}
感谢银菏学姐的监督与指导!!!
2022年10月7日21:26:55