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;
    }
posted @ 2022-07-26 21:31  菜鸡成长记  阅读(50)  评论(0)    收藏  举报