




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
內容簡介及要求主要內容Java語言概述Java語言語法基礎面向對象的特征Applet及其應用圖形用戶界面設計課時安排理論課:40學時實驗課:8學時異常線程集合操作Java輸入/輸出網絡編程Java語言程序設計基本概念類的定義對象類的繼承和多態接口和包常用工具類本章主要內容:第三章面向對象特征基本概念第三章面向對象特征什么是編程語言?人和計算機進行交流的工具和手段編程語言的發展機器語言:0101001匯編語言:mov,push,add,call第三代語言:高級語言,以C語言為代表,過程式編程語言(ProceduralProgrammingLanguage)第四代語言:非過程化/面向對象的編程語言語言的發展:抽象的過程基本概念第三章面向對象特征面向對象(ObjectOriented-OO)面向對象編程(ObjectOrientedProgramming-OOP)面向對象是一種軟件開發的方法,"面向對象的分析與設計"(OOA&OOD—研究生課程)第一個面向對象的語言:Simula-67第一個成功的面向對象編程語言:SmalltalkC++,JAVA,C#,PERL等用客觀世界中描述事物的方法來描述程序中要解決的問題萬事萬物都是對象程序便是成堆的對象,彼此通過消息的傳遞,請求其他對象進行工作
基本概念第三章面向對象特征五個基本概念對象類封裝性繼承性多態性基本概念第三章面向對象特征對象(object)everythingisanobject現實世界的對象:桌子、書、自行車、電視、狗、文件、表格、按鈕、窗口對象包含兩個特性狀態:指對象本身的信息(內部信息/內部變量)行為:實現對信息的訪問/對象的操作標志:代表對象的標識符山地車的狀態(兩個車輪、一些齒輪、速度、擋數),行為(剎車、加速、減速和換擋)書包含很多信息,擁有訪問所包含信息的方法,一頁一頁的看,通過目錄找到感興趣的內容基本概念第三章面向對象特征對象(object)狀態變量(variables)行為方法(method)對象就是變量和相關方法的軟件集合一個對象可以由其他對象組合而成,窗口(按鈕,菜單條,文本框,狀態欄等)程序就是對象的集合,對象之間相互交互和通信完成任務搭積木Aprogramisabunchofobjectstellingeachotherwhattodobysendingmessages基本概念第三章面向對象特征類(class)亞里士多德:theclassoffishesandtheclassofbirds現實世界中,存在很多同類的對象,很多桌子、書、自行車一種原型,一種抽象,一種共性,一個模板Everyobjecthasatype實例(instance),某類對象的一個特定實體,類是對象的一個抽象表格(類)填入不同的個人信息不同的對象基本概念第三章面向對象特征封裝性對象本身的數據得到保護/隱藏其他對象僅僅需要知道對該對象的訪問方法(接口/interface)即可好處模塊化--每個對象的源文件可以是相互獨立的,可以被不同的程序調用,每個對象是一塊積木,可以搭建不同的形狀信息隱藏--通常定義一個公共接口/方法實現對對象的訪問,可以調整對象的私有信息和方法,而不會對其他調用它的對象產生影響可重用性黑盒子電腦的DIY噴墨打印機,硒鼓壞/彩色硒鼓基本概念第三章面向對象特征繼承性為什么會有繼承?建立一個類后,發現另一個新的類有相同的特性,兩個選擇:重新定義一個新的類;在已有類的基礎上,修改(加加/減減)父類和子類,子類繼承(擁有)父類所有的數據和方法,同時子類可以有新的數據和方法,"青出于藍,而勝于藍"樹型結構(層次化結構)根(基類)基本概念第三章面向對象特征繼承性運輸工具航空運輸工具陸地運輸工具水上運輸工具人力驅動引擎驅動二輪四輪客運貨運基本概念第三章面向對象特征繼承性多重繼承類A類B類C類D類F類G一個類擁有多個父類產生二義性,例類C和類D都有一個同名的方法,類G?Java中僅僅支持單一繼承,同時Java采用Interface(接口)實現多重繼承而避免父類二義性基本概念第三章面向對象特征多態性表現在繼承中方法的重寫子類從父類繼承(extends擴展)而來多個子類同屬一個父類,所有子類有相同的父類繼承父類的方法在不同的子類中有不同的表現形式表現在用一個類中方法的重載基本概念第三章面向對象特征多態性多態性在繼承中的表現基本概念第三章面向對象特征多態性classSquareextendsShape{ voiddraw(){
System.out.println("Square.draw()"); } voiderase(){
System.out.println("Square.erase()"); }}classTriangleextendsShape{ voiddraw(){
System.out.println("Triangle.draw()"); }voiderase(){
System.out.println("Triangle.erase()");}}classShape{ voiddraw(){} voiderase(){}}classCircleextendsShape{ voiddraw(){
System.out.println("Circle.draw()"); } voiderase(){
System.out.println("Circle.erase()");}}基本概念第三章面向對象特征多態性publicclassTest{publicstaticShaperandShape(){
switch((int)(Math.random()*3)){default:case0:returnnewCircle();case1:returnnewSquare();case2:returnnewTriangle();}
}publicstaticvoidmain(String[]args){Shape[]s=newShape[9];
for(inti=0;i<s.length;i++)s[i]=randShape();
for(inti=0;i<s.length;i++)s[i].draw();}}Circle.draw()Triangle.draw()Circle.draw()Circle.draw()Circle.draw()Square.draw()Triangle.draw()Square.draw()Square.draw()基本概念第三章面向對象特征基本概念類的定義對象類的繼承和多態接口和包常用工具類類的定義第三章面向對象特征程序是對象的集合,而對象是類的實例化源程序就是一個個的Java類Java本身提供的類(核心API)見Java文檔中描述程序員可以對其進行調用j2sdk1.4.1_01\jre\lib\rt.jar(22.4MB)程序員自己定義的類類的定義第三章面向對象特征類的定義格式[類的修飾符]class
類名[extends
父類名]implements[接口名]{
類型 成員變量1;
類型 成員變量2; …… …………
類型 成員方法1(參數1,[參數2,…]){
方法體; }
類型 成員方法2(參數1,[參數2,…]){
方法體; } …… …………}類的定義第三章面向對象特征類的定義格式[類的修飾符]class
類名[extends
父類名][implements
接口名]{ …… ………… }類的修飾符public:公共類,可以被其他類所使用,declaresthattheclasscanbeusedbyanyclassregardlessofitspackage(無任何限制)無修飾/默認說明:aclasscanbeusedonlybyotherclassesinthesamepackage(僅僅能在同一個包中的其他類引用)abstract:declaresthattheclasscannotbeinstantiated(宣布該類不能被實例化)final:declaresthattheclasscannotbesubclassed(宣布該類不能有子類)類的描述第三章面向對象特征類的定義格式[類的修飾符]class
類名[extends
父類名][implements
接口名]{ …… ………… }類的修飾符public:公共類,可以被其他類所使用,declaresthattheclasscanbeusedbyanyclassregardlessofitspackage(無任何限制)無修飾/默認說明:aclasscanbeusedonlybyotherclassesinthesamepackage(僅僅能在同一個包中的其他類引用)abstract:declaresthattheclasscannotbeinstantiated(宣布該類不能被實例化)final:declaresthattheclasscannotbesubclassed(宣布該類不能有子類)類的描述第三章面向對象特征類的修飾符final--Declaresthattheclasscannotbesubclassed.(宣布該類不能有子類)finalclassChessAlgorithm{...}classBetterChessAlgorithmextendsChessAlgorithm{...}Can'tsubclassfinalclasses:classChessAlgorithmclassBetterChessAlgorithmextendsChessAlgorithm{^1error類的描述第三章面向對象特征類的定義格式[類的修飾符]class
類名[extends
父類名][implements接口名]{ …… ………… }extends:繼承的關系implements:實現哪些接口(interface)的方法,實現多重繼承publicclassTestextendsFrame implementsActionListener,
ItemListener{ …… ……}類的描述第三章面向對象特征一個簡單的類classStudent{ Stringname,stuNumber; doublescore1,score2,score3; voidset1(Strings1,Strings2){ name=s1; stuNumber=s2;
System.out.println(name+""+stuNumber); } doublesetScore(doubled1,doubled2,doubled3){ doubled; score1=d1; score2=d2; score3=d3; d=d1+d2+d3; returnd; }}類的描述第三章面向對象特征包(Package)的概念packageorg.jalpha;classtest{ ……}源文件位置:"D:\src\org\jalpha\test.java"編譯方法1:"cdD:\src\org\jalpha\""javac
test.java"編譯方法2:"cdD:\src\""javacorg\jalpha\test.java"class文件位置:"D:\src\org\jalpha\test.class"運行:"cdD:\src\""javaorg.jalpha.test"類的描述第三章面向對象特征包(package)的概念通過包來管理類名空間防止同名類名的沖突層次化的結構對個體(個人和機構)將類文件放在不同的目錄下防止重名org\jalpha\method1\***.javamethod2\***.javaABC公司Engine.javaXYZ公司Engine.java需調用Engine.java?ABC公司com\abc\Engine.javaXYZ公司com\xyz\Engine.java類的描述第三章面向對象特征包(package)的概念packageorg.jalpha;classtest{ ……}D:\src\org\jalpha\test.javaD:\src\org\jalpha\test1.javaD:\src\org\jalpha\test2.javaD:\src\org\weeva\test3.javapackageorg.weeva;importorg.jalpha.*;classtest3{ … …}類成員-變量和方法第三章面向對象特征對象具有狀態和行為成員變量定義[訪問權限修飾符]類型變量名;[訪問權限修飾符]類型變量名[=初值];[訪問權限修飾符]類型變量名[=初值][,變量名[= 初值]…];成員方法定義[訪問權限修飾符]方法返回類型方法名()[throws異常名]{
方法體;}類型:基本類型,復合類型(數組、類和接口)類成員變量的訪問第三章面向對象特征訪問控制修飾符公共訪問控制符-public被所有類訪問默認訪問控制符被同一包中其他類訪問私有訪問控制符-private被該類自身訪問保護訪問控制符-protected該類自身、同一個包中的其他類、其他包中的子類訪問私有保護訪問控制符-privateprotected該類自身、所有子類訪問類成員變量的訪問第三章面向對象特征非訪問控制修符靜態變量static屬于類的變量最終變量final值在程序的執行過程中不會改變易失變量volatile可能同時被多個線程所控制和修改類成員的訪問第三章面向對象特征public(公共變量/公共方法)容許全權訪問,無任何限制(先構造對象,再訪問)classA{
public
intx;
publicvoidprint(){…}}classB{ voidtest(){ Aa=newA();
a.x=100;
a.print(); }}packageabc;classA{
public
intx;
publicvoidprint(){…}}packagexyz;importabc.A;classB{ voidtest(){ Aa=newA();
a.x=100;
a.print(); }}直接訪問公有變量x和公共方法print()classA{
public
intx;
publicvoidprint(){…}}classB{ voidtest(){ Aa=newA();
a.x=100;
a.print(); }}packageabc;classA{
public
intx;
publicvoidprint(){…}}packagexyz;importabc.A;classB{ voidtest(){ Aa=newA();
a.x=100;
a.print(); }}直接訪問公有變量x和公共方法print()類成員的訪問第三章面向對象特征private(私有變量/私有方法)僅能在其所定義的類中被訪問(先構造對象,再訪問)D:\>javacA.javaxhasprivateaccessinAa.x=100;^print()hasprivateaccessinAa.print();^2errorsclassA{
private
intx;
privatevoidprint(){…}}classB{ voidtest(){ Aa=newA();
a.x=100;
a.print(); }}類成員的訪問第三章面向對象特征protected(保護變量/保護方法)容許類本身、子類(有一定限制)以及同一個包中所有類訪問(先構造對象,再訪問)classA{
protected
intx;
protectedvoidprint(){…}}classB{ voidtest(){ Aa=newA();
a.x=100;
a.print(); }}packageabc;classA{
protected
intx;
protectedvoidprint(){…}}packagexyz;importabc.A;classBextendsA{ voidtest(Aa,Bb){
a.x=100;
a.print();
b.x=100;
b.print(); }}//illegal//illegal//legal//legal類成員的訪問第三章面向對象特征protected(保護變量/保護方法)容許類本身、子類(有一定限制)以及同一個包中所有類訪問(先構造對象,再訪問)classA{
protected
intx;
protectedvoidprint(){…}}classB{ voidtest(){ Aa=newA();
a.x=100;
a.print(); }}packageabc;classA{
protected
intx;
protectedvoidprint(){…}}packagexyz;importabc.A;classBextendsA{ voidtest(Aa,Bb){
a.x=100;
a.print();
b.x=100;
b.print(); }}//illegal//illegal//legal//legal類成員的訪問第三章面向對象特征無修飾(友好變量/友好方法)容許類本身以及同一個包中所有類訪問classA{
intx; voidprint(){…}}classB{ voidtest(){ Aa=newA();
a.x=100;
a.print(); }}packageabc;classA{
intx; voidprint(){…}}packageabc;classB{ voidtest(){ Aa=newA();
a.x=100;
a.print(); }}類成員的訪問第三章面向對象特征無修飾(友好變量/友好方法)容許類本身以及同一個包中所有類訪問classA{
intx; voidprint(){…}}classB{ voidtest(){ Aa=newA();
a.x=100;
a.print(); }}packageabc;classA{
intx; voidprint(){…}}packageabc;classB{ voidtest(){ Aa=newA();
a.x=100;
a.print(); }}小結第三章面向對象特征名稱訪問權修飾符類本身子類包所有類公共public默認---保護protected*私有private*指子類與父類不在同一個包中的情況類成員變量第三章面向對象特征static(靜態變量/靜態方法)類的變量/方法,獨立于類的對象,可以直接根據類名調用classS{ staticintA=12,B=34; staticvoidprint(){…}}classTest{ publicstaticvoidmain(String
args[]){
System.out.println("A="+S.A+"B="+S.B);
S.print(); }}類成員第三章面向對象特征static(靜態變量/靜態方法)
classTest{
publicvoidprint(intx){
System.out.println(x); }
publicstaticvoidmain(Stringargs[]){
intx=3; print(x); } }D:\>javacTest.javaTest.java:9:non-staticmethodprint(int)cannotbereferencedfromastaticcontextprint(x);^1errorclassTest{
publicvoidprint(intx){
System.out.println(x);}
publicstaticvoidmain(Stringargs[]){
intx=3; Testt=newTest(); t.print(x); }}classTest{
publicstaticvoidprint(intx){
System.out.println(x); }
publicstaticvoidmain(Stringargs[]){
intx=3; print(x); }}static方法中僅僅可以調用其他static方法類成員變量第三章面向對象特征final變量/方法final變量:定義一個常數,即變量值不能改變finaldoubleAVOGADRO=6.022e23;final類:不能有子類final方法:方法不能被重寫(overriding)classChessAlgorithm{...
finalvoidnextMove(ChessPiece
pieceMoved,
BoardLocation
newLocation){...}...}類成員變量第三章面向對象特征小結類:public,abstract,final,無修飾,[private]類成員publicprotectedprivate無修飾staticfinal類成員方法第三章面向對象特征方法:對象行為的描述完成某種功能的程序塊定義: [訪問權限修飾符]方法返回類型方法名()[throws異常名]{
方法體; }方法參數的傳遞變量的作用域方法的重載(overloading)/重寫(overriding)方法的遞歸調用類成員方法的訪問第三章面向對象特征訪問控制修飾符公共訪問控制符-public被所有類訪問默認訪問控制符被同一包中其他類訪問私有訪問控制符-private被該類自身訪問保護訪問控制符-protected該類自身、同一個包中的其他類、其他包中的子類訪問私有保護訪問控制符-privateprotected該類自身、所有子類訪問類成員方法的訪問第三章面向對象特征非訪問控制修符靜態方法static屬于類的方法最終方法final不能被子類重新定義的方法抽象方法abstract只有方法說明,沒有具體實現本地方法native以其他語言實現方法功能同步方法synchronized用于多線程程序中的協調和同步類成員方法的訪問第三章面向對象特征例classTest{publicstaticvoidmain(Stringargs[]){ doubled_product; AreamyArea;
myArea=newArea();
myArea.setV(3.0,5.0);
d_product=myAduct();
System.out.println("myArea的面積是:"+d_product); }}classArea{ doublewidth,height;voidsetV(doublew,doubleh){ width=w; height=h; } doubleproduct(){ returnwidth*height; }} 成員方法第三章面向對象特征方法參數publicstaticvoidmain(Stringargs[]){
intx=3,y=4; Testp=newTest();
System.out.println(x+""+y);
p.addI(x,y);
System.out.println(x+""+y);
Vectorc=newVector(); c.addElement("s1"); c.addElement("s2");
System.out.println(c.size());
p.addV(c);
System.out.println(c.size()); }}importjava.util.Vector;classTest{ privatevoidaddV(Vectorv){ v.addElement("s3"); }
privatevoidaddI(inti1,inti2){ i1++; i2++; }形參和實參D:\>javaParameter343423注意1:類型匹配注意2:基本類型與復合類型參數傳遞的結果不同PassbyValueInJavamethods,argumentsarepassedbyvalue.Wheninvoked,themethodreceivesthevalueofthevariablepassedin.Whentheargumentisofprimitivetype,pass-by-valuemeansthatthemethodcannotchangeitsvalue.Whentheargumentisofreferencetype,pass-by-valuemeansthatthemethodcannotchangetheobjectreference,butcaninvoketheobject'smethodsandmodifytheaccessiblevariableswithintheobject.成員方法第三章面向對象特征例classTest{publicstaticvoidmain(Stringargs[]){ exA=newex(); A.p(); }}classex{
intu,v; voidp2(intx,inty){
inti,j; for(i=1;i<=x;i++){ j=y+i;
System.out.print(j+""); } } voidp(){ u=3;v=2;p2(u,v);
System.out.println(); u+=v;v*=u;p2(u,v); }}u=3;v=2;u=5;v=10;輸出結果:3451112131415成員方法第三章面向對象特征變量的作用域(成員變量/局部變量)成員方法第三章面向對象特征方法的重載(overload)方法名相同,但方法的參數不同方法描述方法名(標識符)參數類型 方法返回值絕對值abs(a)int
int絕對值abs(a)longlong絕對值abs(a)floatfloat絕對值abs(a)doubledouble……publicstaticint
abs(int
a)publicstaticlongabs(long
a)publicstaticfloatabs(float
a)publicstaticdoubleabs(double
a)
成員方法第三章面向對象特征方法的重載(overload)publicclassExam3_5{ publicstaticvoidmain(String
args[]){
inti1=3,i2=5; charc1='a',c2='b'; floatf1=3.1f,f2=4.1f; doubled1=2.5,d2=3.8; System.out.println(add(i1,i2)); System.out.println(add(c1,i1)); System.out.println(add(i1,f1)); System.out.println(add(f1,d2)); System.out.println(add(d1,i2)); } staticint
add(inti,intj){returni+j;} staticdoubleadd(doublei,doublej){returni+j;}}成員方法第三章面向對象特征方法的重寫(overriding)子類重寫父類的方法classFather{ …… voiddisplay(){ ……; } ……}classSonextendsFather{ …… voiddisplay(){ ……; } ……}Fatherf=newFather();f.display();Sons=newSon();s.display();構造方法第三章面向對象特征創建對象/實例化對象—new
例1:Applea=newApple();(創建對象)例2:Applea;(對象的說明) a=newApple();(實例化對象)對象的實例化通過構造方法(constructor)來實現構造方法的名字與類名相同構造方法沒有返回值構造方法可以有多個,構成方法的重載(overload)構造方法第三章面向對象特征例:對象的實例化和初始化classjex6_8{publicstaticvoidmain(Stringargs[]){
Qangleq1=newQangle();
Qangleq2=newQangle(20,50);
Qangleq3=newQangle(q1); System.out.println(q1.width()+"" +q1.height()); System.out.println(q2.width()+"" +q2.height()); System.out.println(q3.width()+"" +q3.height()); }}classQangle{
inta,h;
Qangle(){ a=10;h=20; }
Qangle(intx,inty){ a=x;h=y; }
Qangle(Qangler){ a=r.width(); h=r.height(); }
intwidth(){returna;}
intheight(){returnh;}}輸出結果:2020501020構造方法第三章面向對象特征再談方法的重載(overload)classTree{
intheight;Tree(){
prt("Plantingaseeding"); height=0;}
Tree(inti){
prt("CreatingnewTree thatis"+i+"feettall"); height=i;}
voidinfo(){
prt("Treeis"+height+ "feetheight");} voidinfo(Strings){
prt(s+":Treeis"+ height+"feetheight");} staticvoidprt(Strings){
System.out.println(s);}}for(inti=0;i<5;i++){Treet=newTree(i);();
("mytree");}newTree();構造方法第三章面向對象特征默認構造方法例classApple{
intcolor; } Applea=newApple();對象實例的判斷:null例Applea;if(a==null)
System.out.println("Daydream");運行時系統自動賦予一個空構造函數如Apple(){}構造方法第三章面向對象特征再談構造方法
classCmethod{
Cmethod(booleanb){}
publicstaticvoidmain(Stringargs[]){
Cmethodc1=newCmethod();
Cmethodc2=newCmethod(false); }}
classCmethod{
Cmethod(booleanb){}
publicstaticvoidmain(Stringargs[]){ //Cmethodc1=newCmethod();
Cmethodc2=newCmethod(false); }}
classCmethod{
Cmethod(booleanb){}
Cmethod(){}
publicstaticvoidmain(Stringargs[]){
Cmethodc1=newCmethod();
Cmethodc2=newCmethod(false); }}運行時系統自動賦予一個空構造方法,僅僅當該類沒定義構造方法的情況下static變量的初始化第三章面向對象特征classSmember{ staticinti=100; staticbooleanb=true; charc='t'; publicSmember(){} publicstaticvoidmain(String
args[]){
Smemberm1=newSmember();
Smemberm2=newSmember(); }}
不論產生多少個對象,屬于類的靜態變量只有一份,即只占有一份存儲空間classSmember{ staticinti;staticbooleanb; static{ i=100; b=true;
System.out.println("Instaticblock"); } charc='t'; publicSmember(){System.out.println("Inconstructor");} publicstaticvoidmain(String
args[]){
Smemberm1=newSmember();
Smemberm2=newSmember(); }}
輸出結果InstaticblockInconstructorInconstructor設計模式的例子第三章面向對象特征classSingleton{ privatestaticSingletonme=newSingleton(); publicstaticSingletongetSingleton(){ returnme; } privateSingleton(){} publicstaticvoidmain(String
args[]){ Singletons1=Singleton.getSingleton(); Singletons2=Singleton.getSingleton(); if(s1==s2) System.out.println("s1iss2"); else System.out.println("s1isnots2"); }}該Singleton類只有一個實例,即該Singleton類只能構造一個對象第三章面向對象特征"DesignPatterns:ElementsofReusableObject-OrientedSoftware"(設計模式)ErichGamma、RichardHelm、RalphJohnson、JohnVlissidesAddison-Wesley,1995這幾位作者常被稱為"四人組(GangofFour)",而這本書也就被稱為"四人組(或GoF)"書設計模式:在一定的環境中解決某一問題的方案23種設計模式,3大類創建型模式(Creationalpattern)規定了創建對象的方式,如Singleton模式、FactoryMethod模式結構型模式(Structuralpattern)規定了如何組織類和對象。這些模式涉及類如何相互繼承或如何從其它類組合,如Adapter、Proxy和Decorator模式行為模式(Behavioralpattern)規定了對象之間交互的方式。如Observer模式、Strategy和Template模式并發模式(Concurrencypattern)規定協調或順序對共享資源訪問的方式MVC(Model/View/Controller,模型/視圖/控制器)設計模式的例子第三章面向對象特征publicclassSequence{privatestaticSequenceinstance;privatestaticintcounter;privateSequence(){counter=0;}publicstaticsynchronizedSequencegetInstance(){if(instance==null){instance=newSequence();
}returninstance;}publicstaticsynchronizedint
getNext(){return++counter;}}這個類不可以再有子類,因為構造方法是privateLazyinstantiation(Lazyinitialization),僅在需要的時候才實例化對象privatestaticSequenceinstance=newSequence();抽象類(abstractclass)第三章面向對象特征一個未完成的類僅僅抽象類可以包含抽象方法(abstractmethods)抽象方法:僅僅申明了方法,但未實現有訪問修飾詞返回值類型方法名參數列表無方法體抽象類(abstractclass)第三章面向對象特征abstractclassPoint{
intx=1,y=1; voidmove(int
dx,int
dy){ x+=dx; y+=dy; alert(); } abstractvoidalert();}abstractclassColoredPointextendsPoint{
intcolor;}classSimplePointextendsPoint{ voidalert(){……}}抽象方法:有訪問修飾詞、返回值類型、方法名和參數列表,無方法體第三章面向對象特征抽象類(abstractclass)abstractclassColoredPointextendsPoint{
intcolor;}抽象類不能被實例化,例Pointp=newPoint();子類繼承抽象類時,必須重寫抽象方法,否則仍為抽象類abstractclassPoint{
intx=1,y=1; voidmove(int
dx,int
dy){ x+=dx; y+=dy; alert(); } abstractvoidalert();}classSimplePointextendsPoint{ voidalert(){……}}Pointp=newSimplePoint();第三章面向對象特征多態性classRectangleextendsGraphics{ doubleh,w; Rectangle(doubleu,doublev){ h=u;w=v; } voidparameter(){
System.out.println(h+""+w); } voidarea(){System.out.println(h*w);}}Rectanglerec=newRectangle(1.0,2.0);Circlecir=newCircle(3.0,"Red");Graphics[]g={rec,cir};for(inti=0;i<g.length;i++){g[i].parameter();g[i].area();}classCircleextendsGraphics{ doubler;Stringc; Circle(doubleu,Stringv){ r=u;c=v; } voidparameter(){
System.out.println(r+""+c);} voidarea(){
System.out.println(Math.PI*r*r);}}運行結果1.02.02.03.0Red28.274333882308138多態性(polymorphism)應用場合:不同子類可以用不同的方式實現同一共同接口,該共同接口建立了一個基本形式abstractclassGraphics{ abstractvoidparameter(); abstractvoidarea();}第三章面向對象特征抽象類(abstractclass)基本概念類的定義對象類的繼承和多態接口和包常用工具類對象第三章面向對象特征引用對象的變量格式:對象名.變量名引用對象的方法格式:對象名.方法名例1Vectorv=newVector();v.addElement("helloworld");例2inta[]={1,2,3,4,5};intsize=a.length;例3System.out.println();對象第三章面向對象特征通過對象引用對象的成員變量和成員方法classQangle{
inta,h;
Qangle(){a=10;h=20;}
Qangle(intx,inty){a=x;h=y;}
Qangle(Qangler){ a=r.width(); h=r.height(); } voidset(intx,inty){a=x;h=y;}
intwidth(){returna;}
intheight(){returnh;}}q1.set(30,40);q1.a=30;q1.h=40;目的相同第一方式更安全、更面向對象(數據封裝)直接操縱變量對象的釋放第三章面向對象特征將對象從內存中清除內存的管理(枯燥、容易出錯)垃圾回收(GarbageCollection)垃圾搜集器(GarbageCollector)周期性地釋放不再被引用的對象,自動完成手動完成,System.gc();publicstaticvoidgc()--Runsthegarbagecollector.
TheJavaplatformallowsyoutocreateasmanyobjectsasyouwant(limited,ofcourse,bywhatyoursystemcanhandle),andyoudon'thavetoworryaboutdestroyingthem.TheJavaruntimeenvironmentdeletesobjectswhenitdeterminesthattheyarenolongerbeingused.Thisprocessiscalledgarbagecollection.對象的使用第三章面向對象特征訪問對象的私有(private)成員通過定義一個公共方法來實現classStudent{ privateStringname; privateStringid; Student(Strings1,Strings2){name=s1;id=s2;}
StringgetName(){returnname;} voidsetName(Strings){name=s;}}Studentst=new
Student("aloha","001");Stringn=st.getName();……st.setName("csma");n=st.getName();……對象的使用第三章面向對象特征對象作為方法的參數[訪問權限修飾符]方法返回類型方法名(參數)[throws異常名]{
方法體;}參數:類型變量名,……類型:基本數據類型/復合類型(對象)參數的傳遞Passbyvalue對象的使用第三章面向對象特征例對象用作方法的參數classjex6_10{publicstaticvoidmain(Stringargs[]){ Spots=newSpot(2,3);
System.out.println("s點的坐標:"+ +s.getX()+","+s.getY()); Transts=newTrans();
ts.move(s,4,5);
System.out.println("s點的坐標:"+ +s.getX()+","+s.getY()); }}classSpot{ privateintx,y; Spot(intu,intv){
setX(u);setY(v);} voidsetX(intx1){x=x1;} voidsetY(inty1){y=y1;}
int
getX(){returnx;}
int
getY(){returny;}}classTrans{ voidmove(Spotp,inth,intk){
p.setX(p.getX()+h);
p.setY(p.getY()+k); }}classjex6_10{publicstaticvoidmain(Stringargs[]){ Spots=newSpot(2,3);
System.out.println("s點的坐標:" +s.getX()+","+s.getY()); Trans.move(s,4,5);
System.out.println("s點的坐標:" +s.getX()+","+s.getY()); }}classSpot{ privateintx,y; Spot(intu,intv){
setX(u);setY(v);} voidsetX(intx1){x=x1;} voidsetY(inty1){y=y1;}
int
getX(){returnx;}
int
getY(){returny;}}classTrans{staticvoidmove(Spotp,inth,intk){
p.setX(p.getX()+h);
p.setY(p.getY()+k); }}classjex6_10{publicstaticvoidmain(Stringargs[]){ Spots=newSpot(2,3);
System.out.println("s點的坐標:" +s.getX()+","+s.getY()); s.move(4,5);
System.out.println("s點的坐標:" +s.getX()+","+s.getY()); }}classSpot{ privateintx,y; Spot(intu,intv){
setX(u);setY(v);} voidsetX(intx1){x=x1;} voidsetY(inty1){y=y1;}
int
getX(){returnx;}
int
getY(){returny;} voidmove(inth,intk){ x=x+h; y=y+k; }}對象的使用第三章面向對象特征對象的訪問對象作為方法的返回值[訪問權限修飾符]方法返回類型方法名(參數)[throws異常名]{
方法體;}返回類型有返回值:基本數據類型/復合類型(對象)無返回值:void對象的使用第三章面向對象特征對象作為方法的返回值例:求兩點坐標之間的中點坐標思路:(x1,y1)和(x2,y2)(x,y)x=(x1+x2)/2,y=(y1+y2)/2Spots1=newSpot(2,3);Spots2=newSpot(4,5);Spots=s1.midSpot(s2);對象的使用第三章面向對象特征例對象用作方法的返回值classjex6_13{publicstaticvoidmain(Stringargs[]){ Spots1=newSpot(3.0,5.0); Spots2=newSpot(6.0,8.0); System.out.println("s1點的坐標:" +s1.getX()+","+s1.getY()); System.out.println("s2點的坐標:" +s2.getX()+","+s2.getY());
Spots=s1.midSpot(s2);
System.out.println("中點的坐標:" +s.getX()+","+s.getY()); }}classSpot{ privatedoublex,y; Spot(doubleu,doublev){
setX(u);setY(v);} voidsetX(doublex1){x=x1;} voidsetY(doubley1){y=y1;} doublegetX(){returnx;} doublegetY(){returny;} SpotmidSpot(Spots){ doublemidX=(x+s.getX())/2; doublemidY=(y+s.getY())/2; returnnewSpot(midX,midY); }}對象的使用第三章面向對象特征數組:類型相同的一列元素簡單的數組publicclassArrayDemo{publicstaticvoidmain(String[]args){
int[]anArray=newint[10]; for(inti=0;i<anArray.length;i++){
anArray[i]=i;
System.out.print(anArray[i]+"");}
System.out.println();}}對象的使用第三章面向對象特征對象數組classTest{ publicstaticvoidmain(Stringargs[]){
inta[]=newint[5]; for(int
i=0;i<a.length;i++)
System.out.println(a[i]); Strings[]=newString[5]; for(int
i=0;i<s.length;i++)
System.out.println(s[i]); }}System.out.println(s[i].length());對象的使用第三章面向對象特征對象數組classStudent{ privateStringname; privateStringid; Student(Strings1,Strings2){name=s1;id=s2;} StringgetName(){returnname;} voidsetName(Strings){name=s;} voiddisplay(){
System.out.println(name+ ""+id);}}Studentst[]=new Student[10];for(inti=0;i<st.length; i++){
st[i]=newStudent(…);}for(inti=0;i<st.length; i++){
st[i].display();}對象的使用第三章面向對象特征對象作為另一個對象的成員變量一個對象中包含另一個對象,組合關系
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 流動飯店定價方案(3篇)
- 探井施工方案(3篇)
- 2025年農業灌溉用水高效利用與水資源管理優化策略報告
- 2025至2030中國馬口鐵禮品盒行業產業運行態勢及投資規劃深度研究報告
- 青春期心理特點與心理教育對策
- 四年數學教學論文
- 小學數學教學設計期刊
- 種植黃瓜實踐報告
- 專業實踐報告題目
- 2025-2030年商業物業產業深度調研及發展趨勢與投資戰略研究報告
- 《物流運輸實務》課件
- 在幼兒園中打造有趣的數學學習環境
- 食品小作坊應急預案范本
- 2023全屋定制家具合同范文正規范本(通用版)
- 蘭州市新初一分班英語試卷含答案
- 吾心可鑒 澎湃的福流
- ZPW-2000A無絕緣軌道電路演示幻燈片
- 黃平縣舊州飛機場紅磚廠原址改擴建項目環評報告
- 統計預測與決策-南京財經大學中國大學mooc課后章節答案期末考試題庫2023年
- 零星材料采購合同
- 天津市大港區2023年數學五下期末學業質量監測模擬試題含解析
評論
0/150
提交評論