day2 回想毕业季被吐槽的面试经历
Java 里 接口和抽象类的区别:
- 抽象类 关键字 使用abstract修饰使用时,子类用extends继承!
- 接口 关键字 interface 子类实现接口是用 implements 关键字
abstract -> 被它修饰的类 抽象类 -> 被它修饰的方法叫抽象方法;
一个完整的抽象类里,可以有多个抽象方法。也可以没有抽象方法。
也可以包含非抽象方法,子类继承抽象父类。必须要重新父类的抽象方法。
接口 interface : 接口在Java 中定义为一个抽象类型,是一堆抽象方法的集合。反义就是说接口中的所有方法必须是抽象的。从定义上看,接口是一个集合,并不是类。 接口中的方法是是需要被 实现的类实现完成接口。
区别:
1,抽象类是类,是有Java类的所有的特征,唯独不能被实例化。当然也包扣了类的构造方法,也就是构造器。
2,接口中不能有构造器,接口中所有方法都是集合。是集合不是类,当然没有构造器方法一说。
3,抽象方法中,可以使用的权限控制关键字。可以有public、protected和default这些修饰符。抽象类的最终目的是需要被继承。是需要子类完成父类的意志。所有不能有private 关键字来修饰。
4,接口中的方法有且只有一个public关键字来修饰。
优势
抽象方法比接口方法快。接口方法慢是因为需要子去找自己实现类的方法。
Java 语言中一个子类可以实现多个接口,但是只能继承自己一个父类。(单继承多实现)
接上代码:描述抽象类的工作模式
package com.msl.minibatis.control;
// 抽象类
/**
*被 abstract 修饰类的叫做 抽象类,抽象类中含有抽象方法和非抽象方法。
*/
public abstract class AbstractGuessGame {
private int number;
public void setNumber (int number) {
this.number = number;
}
// 抽象方法
protected abstract void showMessage(String message);
public abstract int getInput();
// 普通方法
public void start() {
showMessage("请输入要字符!!");
int guess = 0;
do {
guess = getInput();
if (guess < number) {
showMessage("输入的数字偏小!!");
} else if (guess > number) {
showMessage("输入的数字偏大!!!");
} else {
showMessage("输入正确");
}
} while (guess != number);
}
}
package com.msl.minibatis.control;
import java.util.Scanner;
/**
* 子类继承抽象父类,子类重写父类的实现抽象父类的抽象方法
*
*
*/
public class TextModeGame extends AbstractGuessGame{
private Scanner scanner;
// new 可以输入额写字板
public TextModeGame () {
scanner = new Scanner(System.in);
}
@Override
protected void showMessage(String message) {
for (int i = 0; i <message.length() ; i++) System.out.print("******");
System.out.println("\n" + message);
for (int i = 0; i <message.length() ; i++) System.out.print("******");
}
@Override
public int getInput() {
System.out.println("\n 请输入数字*****");
return scanner.nextInt();
}
}
package com.msl.minibatis.control;
public class GuessGameDemo {
public static void main(String[] args) {
AbstractGuessGame guessGame = new TextModeGame();
guessGame.setNumber(50);
guessGame.start();
}
}