2022-07-26 第二小组 张鑫 学习笔记
实训第十八天 抽象.接口.栈和队列
1.学习重点
1.抽象类与抽象方法
2.接口
3.匿名实现类
4.栈和队列
2.学习心得
今天终于把面向对象的四大特征学完了!好充实啊,虽然也没有掌握的面面俱到,但是我自己感觉还是不错的,有时间还要经常复习以前的知识,多看看算法.
3.学习内容
抽象类与抽象方法
抽象方法必须是public或者protected(因为如果是private,不能被子类继承, 子类便无法实现该方法),默认情况下是可以的(默认情况其实就是public)
抽象类不能被直接实例化,需要依靠子类采用向上转型的方式处理
抽象类必须有子类,使用extends继承,一个类只能继承一个抽象类。
子类(如果不是抽象类)则必须重写抽象类中的所有抽象方法
(如果子类没有实现父类的抽象方法,必须将子类也定义为abstract)
抽象方法,没有大括号,没有方法体。
抽象方法,存在的根本意义:约定。自定义的规则
抽象方法约定了约定了返回值,访问权限,参数列表,需要在重写的时候去定义方法体
约定大于配置,配置大于编码
接口
比抽象类更高级的抽象。
声明:使用interface关键字,public interface Ch02
JDK1.7之前:接口中只能定义抽象方法,不能有属性,不能有方法。
(静态的常量)
JDK8及以后:接口中只能定义抽象方法,不能有属性,可以有默认方法和静态方法
静态常量。
JDK7---JDK8:默认方法,静态方法。
接口中结构的特点:
接口中的抽象方法默认是public abstract,推荐省略
接口中的常量默认是public static final,推荐省略
接口中的结构必须是public。
接口可以被实现,实现类
比如说A类 implements 接口,那我们就说A是这个接口的实现类。
如果一个类实现了一个接口,它就需要重写接口中所有的抽象方法。
实现接口是可以多实现的,继承只能单继承。
开发中,如果一件事情可以通过继承和实现接口来解决问题,接口解决。
静态常量
public static final String NAME = "张三";
抽象方法
public abstract void breath();
抽象方法
public abstract void eat();
静态方法
public static void show(){
}
默认方法
谁可以调用它
public default void info(){
}
栈和队列
栈和队列是两种操作受限的线性表。
这种受限表现在:
栈的插入和删除只允许在表的尾端进行(在栈中叫做“栈顶”),满足FILO
First In Last Out;
队列只允许在表位插入元素,在表头删除元素,FIFO First In First Out
栈与队列的相同点:
1.都是线性结构
2.插入操作都是在表尾进行
3.都可以通过顺序结构和链式结构实现。
栈与队列的不同点:
队列,先进先出,栈先进后出
栈
public class Stack {
private SuperLinked superLinked = new SuperLinked();
// 入栈。压栈
public void push(Integer item){
superLinked.add(item);
}
// 返回栈顶元素,不出栈
public Integer peek(){
if(empty()) {
return null;
}
return superLinked.get(superLinked.size() - 1);
}
// 出栈,从栈尾出去
public Integer pop(){
if(empty()) {
return null;
}
Integer integer = superLinked.get(superLinked.get(superLinked.size() - 1));
superLinked.remove(superLinked.size() - 1);
return integer;
}
private boolean empty() {
return superLinked.size() == 0;
}
队列
public class Queue {
private SuperLinked superLinked = new SuperLinked();
// 入队的方法
public void add(Integer item){
superLinked.add(item);
}
// 出队的方法
public Integer poll(){
// 1.判断这个队列是不是空
if(empty()){
return null;
}
// 2.找到队列的头
Integer integer = superLinked.get(0);
// 3.把队伍的头删掉
superLinked.removeFirst();
// 4.返回删除的值
return integer;
}
// 返回队首,不出队
public Integer peek() {
if(empty()) {
return null;
}
return superLinked.get(0);
}
// 判断这个队列是否为空
public boolean empty() {
// if(superLinked.size() == 0){
// return true;
// }
// return false;
return superLinked.size() == 0;
}

浙公网安备 33010602011771号