java编写教师类输出_Java类和对象的区别和联系,超简单易懂!
在面向?qū)ο蟮木幊陶Z言中,類和對象必然是最核心的特性之一。本文主要介紹Java中的類和對象。
示例
以班級成員為例,班上有小紅、小明、小李,還有王老師、張老師和魏老師,我們認為他們都屬于“人類”的范疇。他們都有人類的基本屬性和行為。
細一步看,小紅小明還有小李,他們都是學(xué)生,因此我們說,他們都屬于學(xué)生,我們可以說這幾位同學(xué)都屬于學(xué)生類,他們都有學(xué)生類的基本屬性和行為。
王老師、張老師和魏老師呢?他們都屬于教師類,都擁有教師類的基本屬性和行為。
而我們通過代號指定的班級成員(如小紅或王老師),他們是一個具體的,而不是抽象的目標,我們視他們?yōu)橐粋€個的對象。
因此,我們可以得到這樣的一張圖:
看到這里,相信大家已經(jīng)對類和對象有了自己初步的概念。我是這樣看待類和對象的:類是對象的抽象,對象是類的示例。
類(Class)
Java中的關(guān)鍵字Class就是我們所稱的類。我認為這個翻譯真的太妙了!我們來看看漢字中“類”字的定義(取自百度漢語):
1.許多相似或相同事物的綜合:種~。分~。同~。
2.用于性質(zhì)或特征相同或相似的事物:分成幾~。兩~性質(zhì)的問題。
3.類似:~人猿。~新星。畫虎不成反~狗。
4.姓。
以學(xué)生類為例,我們將所有學(xué)生都有的屬性和行為(方法)抽象出來,我們假設(shè)所有的學(xué)生都有
三個屬性:學(xué)號、姓名、年齡。
三個行為:唱、跳、Rap (現(xiàn)在的學(xué)生還真是多才多藝啊…)
于是,可以得到一個學(xué)生類:
public class Student {
/********* 以下為Student的屬性 **********/
int stuId; //學(xué)號
String name; //姓名
int age; //年齡
/********* 以下為Student的行為 **********/
//唱
public void sing(){
System.out.println(stuId + "號同學(xué)唱了一首歌!");
}
//跳
public void dance(){
System.out.println(name + "同學(xué)跳了一支舞!");
}
//Rap
public void rap(){
System.out.println("這位同學(xué)秀了一段Rap!");
}
}
至此,我們設(shè)計了一個簡單的類,很簡單吧!
Java中,類的設(shè)計其實是在給對象的創(chuàng)建作鋪墊,正如《Java核心技術(shù) 卷Ⅰ 》中定義的:
類是構(gòu)造對象的模板或藍圖
對象(Object)
如果是初次了解可能會覺得有些困難,加把勁!相信自己!
在示例的學(xué)生類中,就存在著三個對象:小紅、小李、小明。他們都擁有學(xué)生類所有的屬性和行為。可以說:有類才有對象,對象是基于類產(chǎn)生的。
1.對象創(chuàng)建(實例化)
在程序設(shè)計中,如果想要使用對象,就需要對它進行創(chuàng)建:
new Student();
此處的new操作符,代表創(chuàng)建對象的任務(wù),那么要創(chuàng)建什么類型的對象呢?需要在new后邊表示出來,此處選擇我們之前設(shè)計好的Student類。
至此,程序創(chuàng)建了一個Student類的對象。其中,Student()是一個構(gòu)造方法(將在下文介紹,此處僅了解)
2.聲明變量
下一步,為了更好的區(qū)分創(chuàng)建的對象,我們會給對象取一個名字。在Java中,使用變量來給對象命名,同時需要告訴編譯器這個對象的類型(如同int a一般)
Student stu1;
至此,程序聲明了一個Student類型的變量stu1。這個變量有時也被稱為對象變量。
有關(guān)對象和對象變量的相關(guān)知識,本文不詳細講述,有興趣的可以看下我的文章:對象和對象變量
3.變量賦值
再用我們創(chuàng)建好的對象,給相應(yīng)變量賦值
Student stu1 = new Student();
之后,對變量stu1進行操作的操作,即是對該對象進行的操作。這個變量stu1即成為了這個對象的引用變量,stu1可以視為對象的名稱。
至此,我們完成了對象創(chuàng)建的工作(有的地方也稱為對象的實例化或?qū)嵗瘜ο?,接下來開始嘗試進行對象的相關(guān)使用操作。
4.對象操作
在Java中,我們使用“[ 對象名 ] + [ . ] + [ 屬性名 ]” 或 “[ 對象名 ] + [ . ] + [ 方法名 ]” 的方式來操作。
我們已經(jīng)知道,我們設(shè)計出的學(xué)生類都會一手Rap的絕活,現(xiàn)在我們想讓stu1來一段精彩Rap秀,于是可以這樣做
stu1.Rap();//輸出結(jié)果:這位同學(xué)秀了一段Rap!
那么,如果我們想看一下這個stu1的年齡呢,很自然的,我們會想要這樣做:
System.out.println(stu1.age);
會得到什么結(jié)果呢?
0
0?這顯然是不正確的,回響一下,我們在創(chuàng)建對象的時候,并沒有說明這個對象的屬性(學(xué)號、姓名、年齡)。所以程序并不知道這個對象的屬性值,它們都會被設(shè)置為默認的初始值。Java中提供了創(chuàng)建對象并給對象賦值的特殊方法:構(gòu)造方法(也稱為構(gòu)造器)
構(gòu)造方法
Java類中存在這樣的方法,它的名字與類名相同,在創(chuàng)建對象時使用。它可在創(chuàng)建對象時定義對象的初始狀態(tài),用于構(gòu)造一個對象。它被稱為構(gòu)造方法(或構(gòu)造器)。同時可分為無參構(gòu)造器(如:Student())和有參構(gòu)造器(如:Student(String a,int b))。
在上文中,我們使用了 “new Student()” 這樣的操作,new代表創(chuàng)建對象的任務(wù),而由誰去執(zhí)行呢?由后邊的構(gòu)造器執(zhí)行,也就是說:創(chuàng)建對象的其實是由構(gòu)造器來構(gòu)造對象。
1.無參構(gòu)造器:不包含參數(shù)的構(gòu)造器
在Student類中,我們并沒有書寫出一個Student()構(gòu)造器,但依舊可以使用這個構(gòu)造器,這是因為:
在編寫一個類時未編寫構(gòu)造器時,系統(tǒng)將會提供一個默認的無參構(gòu)造器
在默認的無參構(gòu)造器中,系統(tǒng)將會給對象的屬性設(shè)置默認的初始值,此處int stuId = 0; String name = null; int age = 0;
因此,當(dāng)我們打印stu1.age的時候,輸出結(jié)果為0。
2.有參構(gòu)造器:有參數(shù)的構(gòu)造器
在無參構(gòu)造器中,并不能夠在創(chuàng)建對象時實現(xiàn)對其賦值。實際上,我們通常都會在設(shè)計類時,書寫一個有參構(gòu)造器。如在Student類中,就可以包含這段代碼:
public Student(int a, String b, int c) {
stuId = a;
name = b;
age = c;
}
現(xiàn)在,假設(shè)要創(chuàng)建一個:學(xué)號為101,姓名為小李,年齡為13的對象,可以采取這樣的方式:
Student stu1 = new Student(101, "小李", 13);
此時,構(gòu)造器在創(chuàng)建對象時,將按照我們輸入的數(shù)據(jù),自動進行對象的初始化賦值操作:
stuId = 001;
name = "小李";
age = 13;
至此,一個學(xué)號為101,姓名為小李,年齡為13的同學(xué)便創(chuàng)建好了。我們輸出測試一下:
System.out.println("我們創(chuàng)建了一個:" + stu1.age + "歲的" + stu1.name + "同學(xué),他的學(xué)號為:" + stu1.stuId + "。");
輸出結(jié)果為:
我們創(chuàng)建了一個:13歲的小李同學(xué),他的學(xué)號為:101。
實際上,當(dāng)我們書寫構(gòu)造器時,系統(tǒng)將會自動在構(gòu)造器的第一行填上 super(); 語句,代表調(diào)用父類的默認無參構(gòu)造器。這里先只做了解,相關(guān)細節(jié)我會在后文中介紹。
總結(jié)一下:
1.構(gòu)造器與類同名
2.構(gòu)造器在new創(chuàng)建對象時使用
3.構(gòu)造器沒有返回值
4.構(gòu)造器可以有0個或多個參數(shù)
5.每個類可以有一個或多個構(gòu)造器
6.當(dāng)未指名構(gòu)造器時,系統(tǒng)將自動提供一個無參構(gòu)造器
至此,我們已經(jīng)完成了簡單的類的設(shè)計和對象的創(chuàng)建,同時還嘗試了對象方法的使用。
下面貼出相關(guān)代碼:
Student.java
public class Student {
/********* 以下為Student的屬性 **********/
int stuId; //學(xué)號
String name; //姓名
int age; //年齡
public Student(){
}
public Student(int a, String b, int c) {
stuId = a;
name = b;
age = c;
}
/********* 以下為Student的行為 **********/
//唱
public void sing(){
System.out.println(stuId + "號同學(xué)唱了一首歌!");
}
//跳
public void dance(){
System.out.println(name + "同學(xué)跳了一支舞!");
}
//Rap
public void rap(){
System.out.println("這位同學(xué)秀了一段Rap!");
}
}
Test.java
public class Test {
public static void main(String[] args) {
//創(chuàng)建對象
Student stu1 = new Student(101, "小李", 13);
Student stu2 = new Student(102, "小紅", 12);
Student stu3 = new Student();
//對象引用
System.out.println("我們創(chuàng)建了一個:" + stu1.age + "歲的" + stu1.name + "同學(xué)。他的學(xué)號為:" + stu1.stuId + "。");
stu2.dance();
stu3.rap();
}
}
總結(jié)
以上是生活随笔為你收集整理的java编写教师类输出_Java类和对象的区别和联系,超简单易懂!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LOL波比技能介绍
- 下一篇: java的编译和连接方法_Java:编译