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