Java SE面向对象部分14面向对象高级02.docx
- 文档编号:658650
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:13
- 大小:326.31KB
Java SE面向对象部分14面向对象高级02.docx
《Java SE面向对象部分14面向对象高级02.docx》由会员分享,可在线阅读,更多相关《Java SE面向对象部分14面向对象高级02.docx(13页珍藏版)》请在冰点文库上搜索。
JavaSE面向对象部分14面向对象高级02
JavaSE面向对象部分-14.面向对象高级(02)
本季先重点回顾了方法的重载与覆写、super与this关键字的区别。
之后主要以实例讲解为主,主要回顾了JAVA中的继承及数组的基本概念,之后又讲解了JAVA中继承的图形表示。
上季内容回顾:
1、继承的使用和概念,继承的各种限制
2、子类对象的实例化过程
3、方法覆写
4、super的使用
有两个题目在面试中经常会涉及到哈~~~
面试一:
解释一下方法的覆写与方法的重载的区别:
面试二:
super与this的区别
属性覆写(较少使用)
我们来简单验证下哈
classA
{
Stringname="redking";
};
classBextendsA
{
//子类定义了一个和父类中相同的name属性
Stringname="Michael";
publicvoidprint()
{
//与System.out.println(this.name);效果相同
System.out.println(name);
}
};
publicclassDemo01
{
publicstaticvoidmain(Stringargs[])
{
Bb=newB();
b.print();
}
};
程序打印了在子类中定义的name属性:
Michael
如果要打印父类中的name属性,我们可以修改成super.name
classA
{
Stringname="redking";
};
classBextendsA
{
//子类定义了一个和父类中相同的name属性
Stringname="Michael";
publicvoidprint()
{
//与System.out.println(this.name);效果相同
System.out.println(name);
//如果要打印父类中的name属性,我们可以修改成super.name
System.out.println(super.name);
}
};
publicclassDemo01
{
publicstaticvoidmain(Stringargs[])
{
Bb=newB();
b.print();
}
};
父类中的name属性输出了哈~这就叫属性的复写
属性一般情况下都要求被封装的,被封装之后肯定子类是无法看见父类中的内容,所以根本就无法覆写。
super与this调用构造方法能同时写在一个构造方法之中吗?
答案是不行哈~
Super调用构造方法时,一定要放在构造方法的首行,this调用构造方法时也必须放在首行,如果两个都放在首行,则肯定冲突。
有人认为可以不调用super方法哈,我们看下面的Demo02
classA
{
publicA(){}
};
classBextendsA
{
//里面有三个构造方法
publicB()
{
this("abc",888);
}
publicB(Stringname)
{
this();
}
publicB(Stringname,intage)
{
this(name);
}
};
这样就产生了一个问题,我们在讲this关键字时也是提到过的哈~
在使用this()调用构造方法的时候肯定要留下一个出口。
否则编译通不过哈~
classA
{
publicA(){}
};
classBextendsA
{
//里面有三个构造方法
publicB()
{
//最好把this("abc",888);修改成super()作为出口哈~
super();
}
publicB(Stringname)
{
this();
}
publicB(Stringname,intage)
{
this(name);
}
};
现在编译就通过了哈~
本季主要知识点:
1、继承的类图表示
2、继承的题目
现在我们来看个Demo03:
classA
{
};
classBextendsA
{
};
这个滴继承关系我们来用类图表示
知道了上面的内容,我们来看下练习题:
classPerson
{
privateStringname;
privateStringaddr;
privatecharsex;
privateintage;
//一般参数少的构造方法写在上面哈~~
publicPerson(){}
publicPerson(Stringname,Stringaddr)
{
this.setName(name);
this.setAddr(addr);
this.setSex('男');
this.setAge(27);
}
publicPerson(Stringname,Stringaddr,charsex,intage)
{
this.setName(name);
this.setAddr(addr);
this.setSex(sex);
this.setAge(age);
}
publicvoidsetName(Stringname)
{
this.name=name;
}
publicvoidsetAddr(Stringaddr)
{
this.addr=addr;
}
//M:
表示男;F:
表示女
publicvoidsetSex(charsex)
{
this.sex=sex;
}
publicvoidsetAge(intage)
{
this.age=age;
}
publicStringgetName()
{
returnthis.name;
}
publicStringgetAddr()
{
returnthis.addr;
}
publicchargetSex()
{
returnthis.sex;
}
publicintgetAge()
{
returnthis.age;
}
//所有的内容应该交给外部输出
publicStringgetInfo()
{
return"姓名:
"+this.name
+",地址:
"+this.addr
+",性别:
"+(this.sex=='M'?
"男":
"女")
+",年龄:
"+this.age;
}
};
classStudentextendsPerson
{
privatefloatmath;
privatefloatenglish;
publicStudent()
{
//默认隐含了super();
super();
}
publicStudent(Stringname,Stringaddr)
{
super(name,addr);
}
publicStudent(Stringname,Stringaddr,charsex,intage,floatmath,floatenglish)
{
super(name,addr,sex,age);
this.setMath(math);
this.setEnglish(english);
}
publicvoidsetMath(floatmath)
{
this.math=math;
}
publicvoidsetEnglish(floatenglish)
{
this.english=english;
}
publicfloatgetMath()
{
returnthis.math;
}
publicfloatgetEnglish()
{
returnthis.english;
}
publicStringgetInfo()
{
returnsuper.getInfo()+",数学成绩:
"+this.math+",英语成绩:
"+this.english;
}
};
publicclassDemo04
{
publicstaticvoidmain(Stringargs[])
{
//使用学生类
Studentstu=newStudent("王乾","无锡",'M',27,98.0f,99.0f);
System.out.println(stu.getInfo());
}
};
现在我们将其导入类图哈~
下面再来看一个练习题哈~
Java中在声明数组长度的时候可以给一个变量,变量的内容可以在程序运行时自动决定。
//声明数组类
classArray
{
//设置整型数组
privateinti[]=null;
//设置一个脚标表示插入的点位置
privateintfoot=0;
//在构造方法处写入数组的大小
publicArray(intlen)
{
this.i=newint[len];
}
//输入数据时必须保证数组里有空间接收此数据
publicbooleanadd(inttemp)
{
//先判断是否数组中已经加满了内容
if(this.foot { //表示数组里面依然有空间可以插入数据 this.i[this.foot]=temp; //修改脚标 this.foot++; returntrue; } else { returnfalse; } } //理解为得到全部的数组内容 publicint[]getAll() { returnthis.i; } }; //定义排序的子类 classSortArrayextendsArray { //排序类是Array类的子类,所以此处必须传入一个大小 publicSortArray(intlen) { super(len); } //得到的是一个排序后的数组 //最好复写getAll()方法 publicint[]getAll() { //但是此方法返回的是一个排序好的数组 //采用由低到高的方式排序 for(inti=0;i { for(intj=0;j { if(super.getAll()[i] { //两个数字相换 intt=super.getAll()[i]; super.getAll()[i]=super.getAll()[j]; super.getAll()[j]=t; } } } returnsuper.getAll(); } }; classReverseArrayextendsArray { publicReverseArray(intlen) { super(len); } publicint[]getAll() { //反转指的是与插入的顺序相反即可 inttemp[]=newint[super.getAll().length]; //定义一个temp脚标的变量 intcou=0; for(inti=super.getAll().length-1;i>=0;i--) { temp[cou]=super.getAll()[i]; cou++; } returntemp; } } publicclassDemo05 { publicstaticvoidmain(Stringargs[]) { SortArraysa=newSortArray(8); sa.add(15); sa.add(22); sa.add(07); sa.add(82); sa.add(75); sa.add(99); sa.add(27); sa.add(89); print(sa.getAll()); System.out.println("\n"+"**********排序类与反转类分割线哈~~~**********"); ReverseArrayra=newReverseArray(8); ra.add(15); ra.add(22); ra.add(07); ra.add(82); ra.add(75); ra.add(99); ra.add(27);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java SE面向对象部分14面向对象高级02 SE 面向 对象 部分 14 高级 02