ch05java高级类特性Word下载.docx

上传人:b****5 文档编号:21160270 上传时间:2023-01-28 格式:DOCX 页数:47 大小:47.01KB
下载 相关 举报
ch05java高级类特性Word下载.docx_第1页
第1页 / 共47页
ch05java高级类特性Word下载.docx_第2页
第2页 / 共47页
ch05java高级类特性Word下载.docx_第3页
第3页 / 共47页
ch05java高级类特性Word下载.docx_第4页
第4页 / 共47页
ch05java高级类特性Word下载.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

ch05java高级类特性Word下载.docx

《ch05java高级类特性Word下载.docx》由会员分享,可在线阅读,更多相关《ch05java高级类特性Word下载.docx(47页珍藏版)》请在冰豆网上搜索。

ch05java高级类特性Word下载.docx

Stringname,Stringspeciality){

this.id=id;

this.name=name;

this.speciality=speciality;

}

//publicStudent(){

//this.id=null;

//this.name=null;

//this.speciality=null;

//

//}

publicvoidsetId(Stringid){

publicStringgetId(){

returnid;

publicStringgetName(){

returnname;

publicvoidsetName(Stringname){

this.name=name;

publicStringgetSpeciality(){

returnspeciality;

publicvoidsetSpeciality(Stringspeciality){

this.speciality=speciality;

publicStringgetStudentInfo(){

return"

id="

+getId()

+"

name="

+getName()

speciality="

+getSpeciality();

publicabstractintsum();

}

publicclassAgricultureStudentextendsStudent{

privateintbotany;

privateintgengzuo;

publicAgricultureStudent(Stringid,

Stringname,Stringspeciality,intbotany,intgengzuo){

/*父类没定义构造方法或有无参构造方法

super();

//super可省略

//this.id=id;

//this.name=name;

//this.speciality=speciality;

//this.botany=botany;

*/

//父类有参数时

super(id,name,speciality);

this.botany=botany;

this.gengzuo=gengzuo;

publicintgetBotany(){

returnbotany;

publicvoidsetBotany(intbotany){

this.botany=botany;

@Override

returnsuper.getStudentInfo()

score="

+getBotany();

publicintsum(){

returngengzuo+botany;

publicclassStudentTest{

publicstaticvoidmain(Stringargs[]){

AgricultureStudentagicultureStudent=newAgricultureStudent("

123"

"

li"

"

agriculture"

90,67);

System.out.println("

id"

+agicultureStudent.getId()

sum="

+agicultureStudent.sum());

/**

*没有抽象方法的抽象类

*@authortai

publicabstractclassABDemo{

intage=10;

voidsetAge(inta){

age=a;

publicstaticvoidmain(Stringa[]){

ABDemoa1=newABDemo();

//此命令会出错,抽象类不能生成对象

4、实例

publicclassPolymorphism

{

publicstaticvoidmain(Stringargs[])

{

Trianglet=newTriangle(5.0,2.0);

t.show_area();

Rectangler=newRectangle(3.0,4.0);

r.show_area();

Circlec=newCircle(10.0);

c.show_area();

abstractclassFigure

protecteddoublex=10.0,y=5.0;

abstractvoidshow_area();

classTriangleextendsFigure

Triangle(doublea,doubleb)

x=a;

y=b;

voidshow_area()

System.out.println("

triangle:

"

+(0.5*x*y));

classRectangleextendsFigure

Rectangle(doublea,doubleb)

rectangle:

+(x*y));

classCircleextendsFigure

Circle(doublea){x=a;

finaldoublepi=3.1416;

circle:

+(pi*x*x));

实例二、

publicabstractclassMath{

intanswer;

voidshow(){

System.out.print("

answer"

+answer);

abstractvoidadd(inta,intb);

//计算a+b

abstractvoidsub(inta,intb);

//计算a-b

abstractvoidmul(inta,intb);

abstractvoiddiv(inta,intb);

//a/b

classComputeextendsMath{

//在此类里继承了show

voidadd(inta,intb){

answer=a+b;

voidsub(inta,intb){

answer=a-b;

voidmul(inta,intb){

answer=a*b;

voiddiv(inta,intb){

answer=a/b;

publicclassApp{

Computecmp=newCompute();

cmp.add(3,5);

cmp.show();

强调:

抽象类的子类必须在类中实现抽象类中的抽象方法,即给出抽象方法的定义,它才不是抽象类。

5、强调

将类Triangle方法中的show_area()去掉,前必须加abstract关键字,为什么?

因为类Triangle没有对show_area()进行重写,而是直接继承了抽象方法

abstractclassTriangleextendsFigure

不使用抽象类,如果子类没有覆盖超类中的非抽象方法,也不会出错,但没有意义

抽象类可否有自己的构造方法?

答案是:

抽象类中允许有自己的构造方法,但是该构造方法并不能直接实例化自己的对象.如果在抽象类中存在有参构造方法,则必须在子类中明确的使用super([参数列表])指明要调用父类中的哪个构造方法.

四、为什么要使用抽象类

1、抽象类是规范

为了使抽象类的子类在完成相同或相似的功能时,具有相同的方法名。

在规化类库时,在抽象类中定义出抽象方法,使实现它的子类的程序员去实现。

2、代码重用

可以继承.

3、多态

为了实现多态。

第二节抽象类与多态

一、实例一

finaldoublePI=3.1416;

+(PI*x*x));

测试一:

publicclassTest1

//Figuref=newTriangle(5.0,2.0);

//f.show_area();

//f=newRectangle(3.0,4.0);

//f=newCircle(10.0);

测试二:

publicclassTest2

Figuref[]=newFigure[3];

//为什么

f[0]=newTriangle(5.0,2.0);

f[1]=newRectangle(6.0,87.0);

f[2]=newCircle(100.0);

for(Figuref1:

f)

f1.show_area();

测试三:

publicclassTest3{

publicstaticvoidshow(Figuref){

f.show_area();

publicstaticvoidmain(Stringargs[]){

Triangletriangle=newTriangle(5.0,2.0);

Rectanglerectangle=newRectangle(3.0,4.0);

Circlecircle=newCircle(10.0);

show(triangle);

show(circle);

show(rectangle);

测试四:

publicclassTest4{

publicstaticvoidshow(Rectanglerec[]){

for(Rectanglerectangle:

rec){

rectangle.show_area();

Rectanglerectangle[]=newRectangle[2];

rectangle[0]=newRectangle(3.0,4.0);

rectangle[1]=newRectangle(5.0,4.0);

二、实例二

abstractdoublearea();

classRectangleextendsFigure

doublearea()

return(x*y);

classTriangleextendsFigure

doublez;

Triangle(doublea,doubleb,doublec)

z=c;

doublep=(x+y+z)/2;

returnMath.sqrt(p*(p-x)*(p-y)*(p-z));

classCircleextendsFigure

returnMath.PI*x*x;

publicstaticdoubletotalArea1(Figuref[]){

doubletotalArea=0;

f){

totalArea+=f1.area();

returntotalArea;

f[0]=newTriangle(5.0,6.0,7.0);

totalarea="

+totalArea);

totalarea1="

+totalArea1(f));

importjavax.swing.JOptionPane;

*

publicclassTest5{

Stringinput=JOptionPane.showInputDialog("

输入圆的半径"

);

doubler=Double.parseDouble(input);

f[2]=newCircle(r);

JOptionPane.showMessageDialog(null,"

publicclassTest6{

doubler;

try{

r=Double.parseDouble(input);

}catch(NumberFormatExceptione){

r=0.0;

作业:

第三节接口(interface)

一、接口的概念

接口是和类一种相似又有区别的一种结构,接口的设计和调用也是Java程序设计的重要技术。

接口是一种特殊的抽象类

接口是一种完全没有实现的类。

接口用关键字interface来定义,而不是class;

接口中定义的变量都是公用的最终的静态变量(即常量用publicstaticfinal修饰);

接口中没有构造方法,而且定义的方法全是抽象方法(即在方法中只提供方法的定义,而没有提供方法的实现语句),接口中的方法是用publicabstract修饰的。

接口采用多重继承机制,而不是采用类的单一继承机制。

二、接口的声明

接口的格式如下:

interface接口名

常量的定义

方法的说明

三、接口的使用---类对接口的继承(实现)

class类名implements接口名

实例一、

publicclassInterfaceDemo

//Aa=newA();

//接口不能生成对象

Bb=newB();

b.show();

publicinterfaceA{

doubleg=9.8;

voidshow();

publ

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1