ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

20220725 第一组 于芮 面向对象之多态

2022-07-25 19:02:03  阅读:88  来源: 互联网

标签:Node 于芮 20220725 多态 next 链表 节点 data public


  小白成长记——第十六天      今天主要的学习内容是面向对象的第三个特点——多态,相比较来说比前两个特点更难理解,综合性比较强,对于前两个特点——封装和继承的理解需要很深,才可以理解多态的概念,来看看今天的学习笔记吧!

多态
形成的三个条件
1.有继承
2.有重写
3.有父类对象指向子类引用

多态的形式
1.父类 父类对象=new 子类();-------向上转型
2.子类 子类对象=new 父类();------向下转型
发生向下转型的前提,要先发生向上转型,才能通过强转再转成子类类型


关键字instanceof:判断某一个对象是否是某一个类的实例,返回值是boolean类型

匿名对象
语法:new 类名();
功能:和正常有名字的对象的功能是相同的,依然具备了调用属性,方法的功能
使用场景:多数是在用在传参,实参,多数情况下配合构造器使用
好处:节约栈资源


链表:是一个数据结构
在内存中,数组和链表都是最基本的数据结构,
线性表,在线性结构中,他是含有大于等于零个节点
下一个连接上一个节点,有且只有一个下一个节点
单向链表:维护自身的同时,还要维护下一个节点
双向链表:维护自身的同时,还要维护上一个和下一个节点


方法的重写:重写方法的返回值可以是被重写方法的返回值的子类

   今天的主要实践是来自单链表的增加,修改,删除,查找,来看看今天的代码!

 

public class SuperLinked {
    //链表的长度
    private int size;
    //链表的第一个节点
    private Node first;
    //链表的最后一个节点
    private Node last;

    public SuperLinked() {
    }
    //把数据添加到链表的尾部
    public  boolean add(Integer data){
        //把传入的数据建成一个节点
        Node node=new Node(data,null);
        //如果现在的链表是空的,那我就是第一个节点
        if(first==null){
            first=node;
        }else {
            //如果链表不是空,那我就是最后一个节点
            //我应该是在原来的last节点后面
            //我是原来last节点的下一个节点
            last.setNext(node);
        }
        last=node;
        size++;
        return true;
    }
    //在指定位置添加元素
    public boolean add(int index,Integer data){
        Node node=getNode(index);
        Node newNode=new Node(data,null);
        if(node!=null){
            /*Node next=node.getNext();
            newNode.setNext(next);*/
            newNode.setNext(node.getNext());
            node.setNext(newNode);
        }else {
            //如果要插入的位置是null,只有一种情况,就是整个链表都是空
            Node frist = newNode;
            last=newNode;
            
        }
        size ++;
        return true;
    }
    //默认删除头部的数据
    public boolean removeFirst(){
        if(size<0){
            return  false;
        }
        if(first!=null){
            first=first.getNext();
            size--;
        }
        return true;
    }
    //删除尾部的数据
    public  boolean removeLast(){
        if(size<=0){
            return  false;
        }
        if(size==1){
            first=null;
            last=null;
            size--;
            return  true;
        }
        if(last!=null){
            last=getNode(size-2);
            last.setNext(null);
            size--;
        }
        return true;
    }
    public  boolean remove(int index){
        if(size<0){
            return false;
        }
        if(size==1){
            first =null;
            last=null;
            size--;
            return true;
        }
        else {
            Node node=getNode(index-1);
            node.setNext(node.getNext().getNext());
        }
        size--;
        return  true;
    }
    //修改指定下标位置的元素
    public boolean set(int index,Integer data){
        Node node=getNode(index);
        node.setData(data);
        return true;
    }
    //根据下标获取指定的数据
    public  Integer get(int index){
        return getNode(index).getData();
    }
    //获取链表的长度
    public int size(){
        return  size;
    }
    //根据下标获取指定节点

    public Node getNode(int index){
        if(index<0){
            index=0;
        }
        if(index>=size-1){
            index=size-1;
        }
        //找到第index个
        Node cursor=first;
        for (int i = 0; i < index; i++) {
            cursor=cursor.getNext();

        }
        return cursor;
    }

}

 

public class Node {
    private Integer data;
    private  Node next;

    public Node(Integer data, Node next) {
        this.data = data;
        this.next = next;
    }

    public Integer getData() {
        return data;
    }

    public void setData(Integer data) {
        this.data = data;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }

    @Override
    public String toString() {
        return "Node{" +
                "data=" + data +
                ", next=" + next +
                '}';
    }
}

 

标签:Node,于芮,20220725,多态,next,链表,节点,data,public
来源: https://www.cnblogs.com/dijiuzu/p/16518429.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有