進階類別(Class) - Java學習筆記
文章推薦指數: 80 %
而包含了抽象方法的類別則稱為抽象類別。
範例:. 程式, 輸出. abstract class AbstractTest{ private int x; public abstract void getX(); }
首頁
簡介
Hello,World!
變數類型
運算子
常用變數方法
基本輸入
條件式
迴圈式
模糊化程式設計-方法(Method)
字串(String)
陣列(Array)
類別(Class)-基礎
類別(Class)-進階
例外處理(Exception)
視窗程式設計
視窗程式設計-低階事件
視窗程式設計-語意事件
檔案處理
繪圖與多媒體
網路程式設計
.
類別(Class)-進階
在本章節將會介紹類別的各種進階功能,如繼承、抽象、多形等。
繼承
若要將類別a繼承類別b的成員變數、方法,則需在宣告類別時加上extends:
classaextendsb
繼承他類別(父類別)的類別(子類別)將會擁有其所有的成員。
super
當父類別有建構子時,子類別須以super(建構子)給予父類別建構子。
當子類別的成員方法與父類別的成員方法衝突時,須在使用父類別成員方法時於前面加上super.。
範例:
classtest1{
privateintx,y;
publictest1(intx,inty){
this.x=x;
this.y=y;
}
publicvoidgetValue(){
System.out.println("x="+x);
System.out.println("y="+y);
}
}
classtest2extendstest1{
privateintz;
publictest2(intx,inty,intz){
super(x,y);
this.z=z;
}
publicvoidgetValue(){
super.getValue();
System.out.println("z="+z);
}
}
publicclassexample{
publicstaticvoidmain(String[]args){
test2x=newtest2(3,5,8);
x.getValue();
}
}
靜態(static)
當成員宣告為靜態時,將不受主程式宣告影響,只會有一個。
程式
輸出
classtest{
privatestaticintcount=0;
publictest(){
count++;
}
publicvoidgetCount(){
System.out.println("Count:"+count);
}
}
publicclassexample{
publicstaticvoidmain(String[]args){
testx=newtest();
x.getCount();
testy=newtest();
y.getCount();
testz=newtest();
z.getCount();
}
}
Count:1Count:2Count:3
final
宣告在類別
當final宣告在類別上時,該類別將無法被繼承。
宣告在函數
當final宣告在函數上時,子類別將無法覆寫。
宣告在變數
當final宣告在變數上時,該變數將被定義為常數,無法再進行修改。
protected
使用方法與public(公開)、private(隱藏)相同,功能為僅供父類別與子類別使用,可說是介於public與private之間。
抽象(Abstract)
定義類別時,可以僅宣告方法名稱而不輸入方法內容,這種方法成為抽象方法,
而包含了抽象方法的類別則稱為抽象類別。
範例:
程式
輸出
abstractclassAbstractTest{
privateintx;
publicabstractvoidgetX();
}
classtestextendsAbstractTest{
privateintx;
publictest(intx){
this.x=x;
}
publicvoidgetX(){
System.out.println("x="+x);
}
}
publicclassexample{
publicstaticvoidmain(String[]args){
testx=newtest(3);
x.getX();
}
}
x=3
多形(Polymorphism)
多形(Polymorphism)是物件導向程式設計的重要觀念,可以讓應用程式更容易擴充。
因為不須針對不同資料型態分別建立類別,而是繼承一個基礎類別來建立同名方法,
如此就可以處理不同資料型態,當要新增新的資料型態也變得十分容易。
範例:
程式
abstractclassshape{
protecteddoublevalue;
publicabstractvoidvolume();
}
classballextendsshape{
publicball(doubleradius){
value=(4/3)*Math.PI*Math.pow(radius,3);
}
publicvoidvolume(){
System.out.println("球體積:"+value);
}
}
classcubeextendsshape{
publiccube(doublelength,doublewidth,doubleheight){
value=length*width*height;
}
publicvoidvolume(){
System.out.println("立方體體積:"+value);
}
}
classpyramidextendsshape{
publicpyramid(doublesurface,doubleheight){
value=(surface*height)/3;
}
publicvoidvolume(){
System.out.println("錐體體積:"+value);
}
}
publicclassexample{
publicstaticvoidmain(String[]args){
shapes;
ballb=newball(5.0);
cubec=newcube(4.0,8.0,7.0);
pyramidp=newpyramid(14.0,4.0);
for(inti=1;i<=3;i++){
if(i==1)
s=b;
elseif(i==2)
s=c;
else
s=p;
s.volume();
}
}
輸出
球體積:392.6990816987241
立方體體積:224.0
角錐體積:18.666666666666668
巢狀類別(NestedClasses)
如同成員變數與成員方法一樣,類別的成員也能是成員類別。
注意:成員類別的成員不得宣告為static。
範例:
程式
輸出
classOuterClass{
privateintouterNum;
publicOuterClass(intouterNum){
this.outerNum=outerNum;
}
publicvoidprintOuterNum(){
System.out.println(outerNum);
}
classInnerClass{
privateintinnerNum;
publicInnerClass(intinnerNum){
this.innerNum=innerNum;
}
publicvoidprintInnerNum(){
System.out.println(innerNum);
}
}
publicclassexample{
publicstaticvoidmain(String[]args){
OuterClassouter=newOuterClass(25);
outer.printOuterNum();
OuterClass.InnerClassinner=outer.newInnerClass(5);
inner.printInnerNum();
}
}
255
介面(Interface)
介面(Interface)可以建立單一物件多型態以及提供多重繼承的功能。
範例(搭配抽象類別):
程式
abstractclassshape{
publicdoublex,y;
}
interfaceAreaInterface{
finaldoublePI=Math.PI;
}
classcircleextendsshapeimplementsAreaInterface{
privatedoubleradius;
publiccircle(doublex,doubley,doubleradius){
this.x=x;
this.y=y;
this.radius=radius;
}
publicvoidarea(){
System.out.println("x="+x);
System.out.println("y="+y);
System.out.println("radius="+radius);
System.out.println("園面積:"+(PI*radius*radius));
}
publicclassexample{
publicstaticvoidmain(String[]args){
circlec=newcircle(5.0,7.0,8.0);
c.area();
System.out.println("PI="+AreaInterface.PI);
}
}
輸出
x=5.0
y=7.0
radius=8.0
園面積:201.06192982974676
PI=3.141592653589793
套件(API)
套件為將相關的類別與介面做集合,如此一來不但能達到保護的功能,更能讓使用上更加方便。
範例(多個檔案至於同一package中):
程式
packagepackage_test
shape.java
publicinterfaceshape{
voidarea();
}
circle.java
publicclasscircleimplementsshape{
privatedoubleradius;
publiccircle(doubleradius){
this.radius=radius;
}
publicvoidarea(){
System.out.println("圓面積:+Math.PI*radius*radius);
}
}
rectangle.java
publicclassrectangleimplementsshape{
privatedoublelength,width;
publiccircle(doublelength,width){
this.length=length;
this.width=width;
}
publicvoidarea(){
System.out.println("矩形面積:+length*width);
}
}
packageExam.java
importpackage_test.circle;
importpackage_test.rectangle;
publicclasspackageExam{
publicstaticvoidmain(String[]args){
circlec=newcircle(6.0);
rectangler=newrectangle(10.0,15.0);
c.area();
r.area();
}
}
輸出
圓面積:113.09733552923255
矩形面積:150.0
延伸文章資訊
- 1D9:[Java]抽象類別(基本範例解說) - iT 邦幫忙
抽象函數不定義其處理方式有了前一篇的基本概念後,再透過以下更加完整的實例來了解abstract 的用法:. abstract class CShape // 定義抽象類別CShape { pro...
- 2進階類別(Class) - Java學習筆記
而包含了抽象方法的類別則稱為抽象類別。 範例:. 程式, 輸出. abstract class AbstractTest{ private int x; public abstract void...
- 3Inner Class)、自訂資料型態@ Penguin 工作室,一起JAVA吧!
事實上我們撰寫的JAVA程式都是包含在一個類別(Class)裡面的,像是先前我們所建立 ... 就會執行的程式,可用在設定參數或某些物件一建立就必須執行的程式,用法如下:.
- 4Java中Class类与反射机制的用法总结 - CSDN博客
Java反射机制Class类的用法详解. ... Java中Class对象和类的实例对象是两个不同的概念,不能混淆!) Class类的官方定义:public final class ...
- 5我要學會Java (二):物件導向其實很簡單 - Noob's Space
類別方法撰寫的方式和一般的方法基本上一樣,只是呼叫的時候,不需要建立物件就可以呼叫了。 把上面的範例加上建構子和類別方法大概是這樣: class ...