2022-07-25 第七小组 房雪莹 学习笔记
今日学习内容:
1.面向对象特征之三:多态
等他们有继承关系时,可以 父类=new 子类
编译看左边,运行看右面
2.多态形成的三个条件:
1.有继承
2.有重写
3.有父类对象指向子类引用
3.多态的两种形式:
第一种多态形式:(向上转型,往大了转)
父类 父类对象 =new 子类();
第二种多态形式:(向下转型)
子类 子类对象=new 父类();(不能直接这么写)
前提是披着别的皮的自己
发生第二种多态的前提,要先发生向上转型,才能通过强转在转成子类
4.instanceof 关键字:
判断某一个对象是否是某一个类的实例,返回值是boolean类型
5.匿名对象:
语法:
new 类名();
功能:
和正常的有名字的对象功能是相同的,依然具备了调用属性,方法的功能
使用场景:多数是用在传参,实参,多数情况下配合构造器使用
好处:节约资源,栈的资源
6.数组是不是类:是
1.站在JVM解析数组时,会生成一个数组的解析数组
2.站在编译角度,不是类因为没有类名,没有结构
7.链表:
单项链表:在维护一个节点的自身的值的同时,还要维护它的下一个值的指向
双向链表:在维护一个节点的自身的值的同时,还要维护它的上一个和下一个值的指向
//把数据添加到尾部
public boolean add(Integer data){
Node node=new Node(data,null);
//如果现在链表是空的,那我就是第一个结点
if (first==null){
first =node;
}else {
//如果链表不是空,那我就是最后一个结点
//我是原来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);
node.setNext(newNode);
}else{
//如果要插入的位置是null,只有一种情况,就是整个链表都是空
first =newNode;
last =newNode;
}
size++;
return true;
}
//默认删除头部的数据
public boolean remove1(){
if (size<0){
return false;
}
if (first !=null){
first =first.getNext();
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 Node getNode(int index){
if (index<0){
index=0;
}
if (index>=size-1){
index=size-1;
}
// 根据下标获取指定的数据
public Integer get(int index) {
return getNode(index).getData();
}
今日学习心得:
今天学习了多态以及链表,觉得不太好理解。