类的加载
1.发生在运行期
2.从磁盘上把.class文件转入到内存中,类加载器
3,类被加载到内存的方法区
4,懒加载,需要的时候才加载
5,new对象,访问静态属性/方法,反射
6.初始化顺序:按照书写顺序
继承
继承要表达的是一种有关系的类
方法重写
1.方法名相同,形参列表也相同,返回类型也相同(备注)
特例:允许返回值类型是父类方法返回类型的子类
2.访问限定符不能比父类的更封闭
3.
super关键字
1.super用来访问父类的构造方法
2.不是代表父类对象,可以臭抽象的理解是执行属性中属于父类的那部分
3.
用继承来实现线性表中顺序表和链表的插入:
public class List {
public int size=0;
public void push(int index,int element){//线性表根据下标插入
System.out.println("没实现");
}
public void pushfront(int element){//头插
push(0,element);
}
public void pushback(int element){//尾插
push(size,element);
}
顺序表
import java.util.Arrays;
public class ArrayList extends List {
int []array=new int[10];
@Override
public void push(int index, int element) {
for(int i=size;i>index;i--){
array[i]=array[i-1];
}
array[index]=element;
size++;
int []a=Arrays.copyOfRange(array,0,size);
System.out.println(Arrays.toString(a));//打印
}
public static void main(String[]args){//测试
ArrayList list=new ArrayList();
list.pushfront(1);
list.pushfront(2);
list.pushback(3);
list.pushback(8);
list.push(2,10);
}
}
链表
import java.util.Arrays;
class Node{
int val;
Node next;
Node(int val){
this.val=val;
}
}
public class LinkedList extends List{
Node head=null;
@Override
public void push(int index, int element) {
Node node=new Node(element);
if(index==0){//头插
node.next=head;
head=node;
}else if(index==size){//尾插
Node last=head;
while(last.next!=null){
last=last.next;
}
last.next=node;
node.next=null;
}else{//中间插
Node pre=head;
for(int i=0;i<index-1;i++){
pre=pre.next;
}
node.next=pre.next;
pre.next=node;
}
size++;
int []a=new int[size];
Node cur=head;
int i=0;
while(cur!=null){//把链表弄到数组中,容易打印
a[i]=cur.val;
i++;
cur=cur.next;
}
System.out.println(Arrays.toString(a));
}
public static void main(String[] args) {//测试
LinkedList list = new LinkedList();
list.pushback(1);
list.pushback(2);
list.pushback(3);
list.pushfront(10);
list.pushfront(20);
list.pushfront(30);
list.push(3, 100);
}
}