1.继承的定义
java中提供了一个继承的关键字extends,用这个关键字可以让一个类与另一个类存在继承关系,其中继承的类为子类,被继承的类为父类
继承的使用范围:
当类与类之间有相同的内容,并且满足子类是父类的一种
继承的特点:
java只支持单继承,不支持多继承,但可以多层继承
对于构造方法来说:不论私有还是非私有,都不能被子类继承
对于成员变量来说:不论私有还是非私有,都可以被子类继承(只不过私有不能直接调用,要通过set和get方法)
对于成员方法来说:在虚方法表内可以被继承,而在虚方法表外则不能;
虚方法表内的都是,非private,非static,非final类的方法
只有父类的虚方法才能被子类继承
2.super关键字
super关键字的调用可以直接访问父类:
比如说
super.name就是访问父类中的name成员变量
3.方法的重写
当父类的方法不满足子类现在的需求时,就要进行方法的重写,书写格式,在继承体系中,子类出现了和父类一样的方法生命,我们就成子类是重写的父类
重写方法要求:
1.重写方法的形参和名称必须与父类中的一致
2.子类重写父类的方法是,访问权限必须大于等于父类
3.子类重写父类时,返回值类型要小于等于父类
4.只有虚方法表中的方法才能被重写
4.今日题目:
color beans
题解:这题纯纯考试的时候犯蠢,十分钟能写完的写了40分钟,就是差考虑最后的,因为排序后到了最后一个一直不回变换flag,因此需要将数组向后扩大一位,因此才能更新,这一个问题我想了半个小时才出来,真的离谱
#include<bits/stdc++.h>
using namespace std;int n;
struct node
{int a;int c;
}q[200005];
bool cmp(node x,node y)
{return x.c<y.c;
}
int main()
{cin>>n;for(int i=1;i<=n;i++){cin>>q[i].a>>q[i].c;}sort(q+1,q+1+n,cmp);int flag=0;int maxn=0x3f3f3f3f;int minn=0;flag=q[1].c;for(int i=1;i<=n+1;i++){if(flag==q[i].c&&q[i].a<maxn){maxn=q[i].a;}if(flag!=q[i].c){flag=q[i].c;if(maxn>minn){minn=maxn;}maxn=q[i].a;}}printf("%d",minn);return 0;
}
最小生成树水题
题解:基本上就是最小生成树,只不过只有一条链子,因此我们只需要标记末尾的点即可,非常简单,实际用时大概20分钟,略慢了一点,最主要最小生成树那个算法忘记了,想了好久才想到
#include<bits/stdc++.h>
using namespace std;int n,m;
int q[1005];
int f[1005];
struct node
{int x;int y;int w;
}lu[100005];
bool cmp(node a,node b)
{return a.w<b.w;
}
int main()
{cin>>n;for(int i=1;i<=n;i++){cin>>q[i];}cin>>m;for(int i=1;i<=m;i++){cin>>lu[i].x>>lu[i].y>>lu[i].w;}sort(lu+1,lu+m+1,cmp);long long sum=0;int cnt=0;for(int i=1;i<=m;i++){if(f[lu[i].y]==0){f[lu[i].y]=1;sum+=lu[i].w;cnt++;if(cnt==n-1)break;}}if(cnt!=n-1){printf("-1");return 0;}printf("%lld",sum);return 0;
}