学习心得
一、专业课
1、继承
(1)has-a
(2)is-a 2)可以基于已经存在的类构造一个新类。继承已经存在的类就可以 复用这些类的方法和域。在此基础上,可以添加新的方法和域,从 而扩充了类的功能 1、子类拥有父类非private的属性和方法。
2、子类可以拥有自己属性和方法,即子类可以对父 类进行扩展。
3、子类可以用自己的方式实现父类的方法
4、子类中变量与父类的一致时,父类的变量不会被覆盖,只是被隐藏 了,可以用super调用
5、子类重写父类方法时,返回类型,方法名,参数必须一致,如果只有 返回类型不同,则会报错.
2、super关键字 一.super关键字作用
1:主要存在于子类方法中,用于指向子类对象中父类对象。
2:访问父类的属性
3:访问父类的函数
4:访问父类的构造函数
二.super注意的地方
this和super很像,this指向的是当前对象的调用,super指向的是当前调 用对象的父类。类加载完毕,创建对象,父类的构造方法会被调用(默认自动 无参),然后执行子类相应构造创建了一个子类对象,该子类对象还包含了一 个父类对象。该父类对象在子类对象内部。thissuper只能在有对象的前提 下使用,不能在静态上下文使用。
三.super关键字的使用
1.子类的构造函数默认第一行会默认调用父类无参的构造函数,隐式语句
super();
2.子类显式调用父类构造函数
在子类构造函数第一行通过super关键字调用父类任何构造函数。如果显式 调用父类构造函数,编译器自动添加的调用父类无参数的构造就消失。构造函 数间的调用只能放在第一行,只能调用一次。super()和this()不能同时存 在构造函数第一行。
3、重写与重载
重载
(1)方法重载是让类以统一的方式处理不同类型数据的一种手段。多 个同名函数同时存在,具有不同的参数个数/类型。
重载Overloading是一个类中多态性的一种表现。
(2)Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字, 但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数 和参数类型来决定具体使用哪个方法,这就是多态性。
(3)重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型 可以相同也可以不相同。无法以返回型别作为重载函数的区分标准
重写
(1)父类与子类之间的多态性,对父类的函数进行重新定义。如果在 子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同 的方法。
但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需 要采用方法的重写。方法重写又称方法覆盖。
(2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参 数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关 键字,该关键字引用了当前类的父类。
(3)子类函数的访问修饰权限不能少于父类的;
4、考试总结
1)一些小细节没记住,如byte也是整形(byteint short long)
2)java关键字
-
Booleanb = true (所有的基本类型都会自动装箱)
-
java运算符
-
5)char c = '4';
char a =(char)('4'+4);
a == '8'
6)这次考试有高分和运气离不开,请保持危机感
二、小组PK
1、我方题目
1.以下程序能否运行
如果不能请指出错在那里,
如果可以请输出程序结果:
classFU {
staticint i ;
intfun(int a){
this.i= a++;
returni+a++;
}
inta = fun(1);
{
System.out.println(a++);
}
static{
++i;
}
publicFU() {
System.out.println(i);
}
}
classZi extends FU {
publicZi() {
System.out.println(super.a);
}
}
publicclass T{
publicstatic void main(String[] args) {
Zizi = new Zi();
}
}
答案:31 4
2.请找出下面程序的错误,可能有几处(请在错误语句后面打星*):
publicclass Test01 {
publicstatic void main(String[] args) {
Bb = new B();
System.out.println(b.fun(2));
}
}
classA{
inta;
publicA(int a) {
this.a= a;
}
doublefun(int a){
returna++;
}
}
classB extends A{
staticint a;
publicB{ //*少括号
super(a++);
}
floatfun(int a){ //*与父类的方法重名但是返回值不同
returna++;
}
}
3.不定项选择题,以下错误的是(AD)
A.覆盖包括成员方法的覆盖和成员变量的覆盖
B.成员方法的覆盖是多态的一种表现形式
C.子类可以调用父类中被覆盖的方法
D.任何方法都可以被覆盖
4.以下程序能否运行
如果不能请指出错在那里,
如果可以请输出程序结果:
publicclass G {
publicstatic void main(String[] args) {
Ii = new I();
Hh = new H();
System.out.println(H.i);
}
}
classH{
staticint i;
static{
System.out.println(++i);
}
staticint h(){
returni++;
}
}
classI extends H{
static{
i++;
}
{
System.out.println(i+h());
}
static{
System.out.println(++i);
}
}
答案:
1
3
6
4
5.以下程序能否运行
如果不能请指出错在那里,
如果可以请输出程序结果:
publicclass N {
staticfloat f = 0.0F;
{
f++;
}
publicstatic void main(String[] args) {
System.out.println(f);
Oo = new O();
}
}
classO extends N{
static{
f++;
}
O(){
main("f");
}
publicstatic void main(String args) {
System.out.println(f);
}
}
答案:
0.0
2.0
2、对方题目
1、以下代码能否执行?若不能?错在哪?若可以,输出结果是什么?
classAA {
inti = 9;
intj;
AA(int...is){
prt("i= " + i + ", j = " + j);
j= 39;
}
staticint x1 = prt("父类静态变量初始化");
staticint prt(String s) {
System.out.println(s);
return100;
}
}
publicclass Test00 extends AA {
intk = prt("子类变量初始化");
Test00(){
prt("k= " + k);
prt("j= " + j);
}
staticint x2 = prt("子类静态变量初始化");
staticint prt(String s) {
System.out.println(s);
return11;
}
publicstatic void main(String[] args) {
prt("第一个输出");
Test00b = new Test00();
}
}
答案:
父类静态变量初始化
子类静态变量初始化
第一个输出
i= 9, j = 0
子类变量初始化
k= 11
j= 39
2、以下代码能否执行?若不能?错在哪?若可以,输出结果是什么?
publicclass Btest {
publicstatic void main(String[] args) {
System.out.println(newZ().fun());
}
}
classF{
inti;
intfun(){
return1;
}
}
classZ extends F{
longfun(){
return100l;
}
}
答案:不能运行,子类重写返回值如果是基本类型,类型要一致
3、以下代码能否执行?若不能?错在哪?若可以,输出结果是什么?
classB extends A {
publicString show(B obj) {return "B and B";}
publicString show(A obj) {return "B and A";}
}
classC extends B {}
classD extends B {}
publicclass A {
publicString show(D obj) {return "A and D";}
publicString show(A obj) {return "A and A";}
publicstatic void main(String[] args) {
Aa=new A();
Bb=new B();
Cc=new C();
Dd=new D();
System.out.println(a.show(b));
System.out.println(a.show(c));
System.out.println(a.show(d));
System.out.println(b.show(b));
System.out.println(b.show(c));
System.out.println(b.show(d));
}
}
正确答案:
Aand A
Aand A
Aand D
Band B
Band B
Aand D
4、以下代码能否执行?若不能?错在哪?若可以,输出结果是什么?
publicclass HelloB extends HelloA {
publicHelloB(){
System.out.println("HelloB");
}
{
System.out.println("I'mB class");
}
static{
System.out.println("staticB");
}
publicstatic void main(String[] args) {
newHelloB();
}
}
classHelloA {
publicHelloA(){
System.out.println("HelloA");
}
{
System.out.println("I'mA class");
}
static{
System.out.println("staticA");
}
}
答案:
staticA
staticB
I'mA class
HelloA
I'mB class
HelloB
5、以下代码能否执行?若不能?错在哪?若可以,输出结果是什么?
publicclass Test {
publicstatic void main(String[] args)throws Exception {
Bb = new B();
System.out.println(b.test());
System.out.println(b.show());
}
}
classA {
privatefloat show(){
return6.0f;
}
privateint test()throws RuntimeException{
return5;
}
intback(){
return9;
}
}
classB extends A{
doubleshow(){
return3.0f;
}
inttest()throws Exception{
return6;
}
longback(){
return5L;
}
}
不能因为子类的抛出异常应该要小于或者等于父类的抛出异常
不能因为子类与父类方法同名时,系统默认重写父类方法,而重写父类方法时,返回值与参数列表需要与父类被 重写的方法一致
私有方法不能被子类继承,所以私有方法不存在被子类重写的情况,子类的方法是个新方法
学习心得:
1.基础细节是魔鬼