抽象类:类的一种。用abstract 关键字修饰类,不能直接创建对象,但是可以有构造器,用于子类继承后使用。
抽象方法:用abstract关键字修饰的方法,没有方法体,必须子类重写。
final关键字:
修饰变量:变为变量,类中可以在构造器中赋值,接口中必须在声明时进行赋值,后续无法修改
修饰方法:变为最终方法,子类只能调用,不能重写;
修饰类:变为最终类,不能被其他类继承,例如String
**接口:**它和类是统一级别的存在,都是引用数据类型
接口没有构造器,不能直接new 对象
接口中的变量都是公开的静态的常量,public static final修饰
接口中的方法都是抽象方法(不考虑1.8新特性)
使用接口时需要提供一个类去实现接口,用到一个关键字implements ,实现类必须重写抽象类中的方法
接口可以有多个实现类 ,一个类可以实现多个接口;一个 类只能继承一个类,一个类可以有多个子类
比较器:
内部比较器:Comparable ,java .lang 包,compareTo(T t)
外部比较器:Comparator java.util 包, compare(T t H h);
分析main方法
public static void main(String[] args) {方法体}
猜数字练习
Number.java
public class Number {
private int num;
public Number() {
super();
this.num =(int)(Math.random()*100+1);
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public boolean guess(int num){
if (num>this.num){
System.out.println("抱歉,太大了");
return false;
}else if(num<this.num){
System.out.println("抱歉太小了");
return false;
}else{
System.out.println("恭喜你猜中了");
return true;
}
}
}
main.java
public class Test {
/*
* 定义一个类,有一个数字属性,int num ,在构造器中对数字进行初始化
* 要产生1-100 的随机数
* 提供一个方法,用于用户使用进行猜数字,要接受用户输入 的一个数字,判断大小
* 如果用户输入
*/
public static void main(String[] args) {
Number number=new Number();
Scanner scanner=new Scanner(System.in);
while(true){
System.out.println("请输入1-100之间的数");
int nextInt = scanner.nextInt();
boolean guess = number.guess(nextInt);
if(guess==true){
break;//猜中,结束循环
}else{
continue;
}
}
}
}
猜数字练习优化
public class Number {
private int num;
public Number() {
super();
this.num =(int)(Math.random()*100+1);
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
//数字判定
private boolean guess(int num){
if (num>this.num){
System.out.println("抱歉,太大了");
return false;
}else if(num<this.num){
System.out.println("抱歉太小了");
return false;
}else{
System.out.println("恭喜你猜中了");
return true;
}
}
//启动器
public void start(Number number) {
Scanner scanner=new Scanner(System.in);
while(true){
System.out.println("请输入1-100之间的数");
int nextInt = scanner.nextInt();
boolean result = number.guess(nextInt);
if(result){
break;//猜中,结束循环
}else{
continue;
}
}
}
}
public class Test {
/*
* 定义一个类,有一个数字属性,int num ,在构造器中对数字进行初始化
* 要产生1-100 的随机数
* 提供一个方法,用于用户使用进行猜数字,要接受用户输入 的一个数字,判断大小
* 如果用户输入
*/
public static void main(String[] args) {
//创建Number对象
Number number=new Number();
//启动猜数字
number.start(number);
}
}
抽象方法抽象类练习
统计程序运行时间
/*
* 要求一定要被子类继承才能使用,用于记录某程序的运行时间
*/
public abstract class Timer {
/*
* 被子类重写,用于定义要执行的代码
*/
public abstract void proceed();
//子类不能重写但是可以调用
public final void start(){
//记录起始时间
long startTime=System.currentTimeMillis();
//执行测试代码
proceed();
//记录结束时间
long endTime=System.currentTimeMillis();
//打印运行时长
System.out.println("运行时长"+(endTime-startTime)+"ms");
}
}
public class Test extends Timer {
/*
* 设计一个类可以记录任何代码运行的时间 提示:抽象方法抽象类
* 模板方法设计模式
*/
@Override
public void proceed() {
for (int i = 0; i < 10000; i++) {
System.out.println(i);
}
}
}
public static void main(String[] args) {
Test test=new Test();
test.start();
}
接口练习
//求不同形状的面积和周长
定义形状接口,定义两个抽象方法:area(); length();
定义三角形,矩形类;实现形状接口,重写抽象方法
利用构造器 进行变量赋值