第6章面向?qū)ο蠡A(chǔ)(6)

重點(diǎn)掌握

1斩箫、類的定義

訪問權(quán)限控制符

? ? ? ? ? ? ? ? ? ? ? ? ?public? ? ? protected? ? ?default? ? ??private?

同一個(gè)類? ? ? ? ? ?可? ? ? ? ? ? ? ? ?可? ? ? ? ? ? ? ??可? ? ? ? ? ?可

同一個(gè)包? ? ? ? ? ? 可? ? ? ? ? ? ? ??可? ? ? ? ? ? ? ??可? ? ? ? ? ?

不同包但繼承? ? ?可? ? ? ? ? ? ? ??可

全局? ? ? ? ? ? ? ? ? ? 可

static 修飾符

如果一個(gè)類用static修飾斥铺,表示他是靜態(tài)的

static可以用來(lái)修飾類的成員方法荸型、類的成員變量,代碼塊



一赫段、實(shí)體類創(chuàng)建

第一種方式:無(wú)參構(gòu)造+get/set

package com.neuedu.test.chap06;

public class XiYouJi {

//姓名

private String name;

//戰(zhàn)斗力

private int sword;

//耐力

private int endurance;

//武器

private String arms;

? ? //年令

private int age;

public XiYouJi() {

super();

System.out.println("無(wú)參構(gòu)造方法被調(diào)用");

}



public String getMingzi() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getSword() {

return sword;

}

public void setSword(int sword) {

this.sword = sword;

}

public int getEndurance() {

return endurance;

}

public void setEndurance(int endurance) {

this.endurance = endurance;

}

public String getArms() {

return arms;

}

public void setArms(String arms) {

this.arms = arms;

}

public String getName() {

return name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}


注意:方法調(diào)用:

實(shí)例化對(duì)象

類名??對(duì)象名= new?? 類名();

public static void main(String[] args) {

//創(chuàng)建對(duì)象一般有兩種方式

//第一種 清水房+逐步采購(gòu)? 無(wú)參構(gòu)造+各個(gè)屬性的set方法? =》各個(gè)屬性的設(shè)置

//缺點(diǎn):逐步構(gòu)建 代碼不夠簡(jiǎn)潔

//優(yōu)點(diǎn):修改不會(huì)影響原有代碼

//適用于屬性經(jīng)常變動(dòng)的

XiYouJi swk = new XiYouJi();

swk.setName("孫悟空");

swk.setSword(5);

swk.setEndurance(5);

swk.setArms("金箍棒");

swk.setAge(18);

XiYouJi ts = new XiYouJi();

ts.setName("唐僧");

ts.setSword(0);

ts.setEndurance(5);

XiYouJi zbj = new XiYouJi();

zbj.setName("豬八戒");

zbj.setSword(2);

zbj.setEndurance(4);

swk.setArms("耙子");

}

}

構(gòu)造方法

用來(lái)創(chuàng)建對(duì)象

特點(diǎn):1)方法名與類名相同

2)沒有返回值 類型惹骂,并且沒有void占位

3)不需要return

分類:

分為無(wú)參構(gòu)造和有參構(gòu)造

如果我們實(shí)例化對(duì)象時(shí)如下寫:

類名? 對(duì)象名=new 類名();? 實(shí)際調(diào)用的是無(wú)參構(gòu)造方法

如果你不寫無(wú)參構(gòu)造 徙邻,系統(tǒng)會(huì)為你自動(dòng)生成一個(gè)。如果你寫了契讲,就會(huì)調(diào)用你新寫的這個(gè)仿吞。

構(gòu)造方法的重載

有參構(gòu)造可以限制參數(shù)個(gè)數(shù),通過(guò)重載實(shí)現(xiàn)

有參構(gòu)造無(wú)參構(gòu)造屬于方法重載

學(xué)生試驗(yàn):

把類的無(wú)參方法注釋掉捡偏,看發(fā)生什么現(xiàn)象

發(fā)現(xiàn)調(diào)用無(wú)參構(gòu)造方法的地方報(bào)錯(cuò)唤冈。

結(jié)論:

如果你在類中寫了有參構(gòu)造,那么系統(tǒng)不會(huì)再幫你生成無(wú)參構(gòu)造了银伟,你如果還想用無(wú)參構(gòu)造 你虹,就需要重載一下無(wú)參構(gòu)造方法绘搞。

無(wú)參構(gòu)造:

創(chuàng)建方式:右鍵-source-generate constructor from superclass

public XiYouJi() {

super();

System.out.println("無(wú)參構(gòu)造方法被調(diào)用");

}

XiYouJi swk = new XiYouJi();

debug測(cè)試一下

學(xué)生練習(xí):無(wú)參方法創(chuàng)建對(duì)象和對(duì)象賦值

有參構(gòu)造:

創(chuàng)建方式:右鍵-source-generate constructor using fields

系統(tǒng)生成代碼如下:

//有參構(gòu)造-經(jīng)常用來(lái)一次性初始化參數(shù)

public XiYouJi(String name, int sword, int endurance, String arms, int age) {

super();

this.name = name;

this.sword = sword;

this.endurance = endurance;

this.arms = arms;

this.age = age;

}

調(diào)用方式:

@Test

public? void test2() {

//精裝房 拎包入住 有參構(gòu)造 -創(chuàng)建同時(shí)把各個(gè)屬性初始化

//有參構(gòu)造如何編寫

//優(yōu)點(diǎn):一次性構(gòu)建,方便傅物,代碼簡(jiǎn)潔

//缺點(diǎn):修改麻煩

//適用于屬性不經(jīng)常變動(dòng)的情況

XiYouJi swk2 = new XiYouJi("孫悟空", 5, 5, "金箍棒",18);

System.out.println(swk2.sword);

}

學(xué)生練習(xí):

練習(xí)有參方法創(chuàng)建對(duì)象和為對(duì)象賦值

注意:

一旦編寫了有參構(gòu)造夯辖,系統(tǒng)不會(huì)再為我們生成無(wú)參構(gòu)造,如果想用無(wú)參構(gòu)造挟伙,需要顯式編寫

其他方法的創(chuàng)建:

除了構(gòu)造方法外楼雹,很多時(shí)候我們還需要編寫自己的業(yè)務(wù)方法。這些方法用于做業(yè)務(wù)尖阔。

課堂簡(jiǎn)單演示:

1)編寫一個(gè)商品的類贮缅,要求包含商品名稱和商品價(jià)格,并且編寫一個(gè)方法能夠在控制臺(tái)輸出“商品名:價(jià)格”介却。并在主函數(shù)中調(diào)用

輸出示例:

可樂:2.5

鼠標(biāo):50


package com.neuedu.test.chap06;

/**

* 1)編寫一個(gè)商品的類谴供,

* 要求包含商品名稱和商品價(jià)格,

* 并且編寫一個(gè)方法能夠在控制臺(tái)輸出“商品名:價(jià)格”齿坷。

* 并在主函數(shù)中調(diào)用

* @author Administrator

*

*/

public class Product {

//商品名稱

private String proName;

//商品價(jià)格

private double proPrice;

//編寫一個(gè)方法能夠在控制臺(tái)輸出“商品名:價(jià)格”桂肌。

public? void printDetail(){

System.out.println(this.proName+":"+this.proPrice);

}

public Product(String proName, double proPrice) {

super();

this.proName = proName;

this.proPrice = proPrice;

}

//并在主函數(shù)中調(diào)用

/*輸出示例:

可樂:2.5

鼠標(biāo):50*/

public String getProName() {

return proName;

}

public double getProPrice() {

return proPrice;

}

public static void main(String[] args) {

//實(shí)例化一個(gè)可樂商品

Product keli=new Product("可樂",2.5);

//調(diào)用可樂的方法打印可樂的詳情

keli.printDetail();

Product mouse=new Product("鼠標(biāo)",50);

mouse.printDetail();

}

}

上面都演示的無(wú)返回值類型的方法,下面學(xué)習(xí)有返回值類型的方法

課堂練習(xí)永淌,作業(yè)題2

定義一個(gè)矩形類Rectangle:

2.1? 有2個(gè)屬性:長(zhǎng)length崎场、寬width

2.2? 通過(guò)構(gòu)造方法Rectangle(int width, int length),分別給兩個(gè)屬性賦值

2.3? 定義三個(gè)方法:getArea()求面積遂蛀、getPer()求周長(zhǎng)谭跨,showAll()分別在控制臺(tái)輸出長(zhǎng)、寬李滴、面積螃宙、周長(zhǎng)。

2.4? 創(chuàng)建一個(gè)Rectangle對(duì)象所坯,并輸出相關(guān)信息

public class Rectangle {

//長(zhǎng)

private double length;

//寬

private double width;

public Rectangle(double length, double width) {

super();

this.length = length;

this.width = width;

}

/**

* getArea()求面積

*/

public double getArea(){

double area=length*width;

return area;

}

? /**

? ? * getPer()求周長(zhǎng)

? ? */

public double getPer(){

double girth=(this.length+this.width)*2;

return girth;

}

/**

* showAll()分別在控制臺(tái)輸出長(zhǎng)谆扎、寬、面積芹助、周長(zhǎng)堂湖。

*/

public void showAll(){

System.out.println("長(zhǎng)"+length);

System.out.println("寬"+width);

double result=getArea();

System.out.println("面積"+result);

double result2=getPer();

System.out.println("周長(zhǎng)"+result2);

}

public static void main(String[] args) {

Rectangle rc=new Rectangle(13.4,5);

rc.showAll();

}

}

java 面向?qū)ο笕筇卣鳎?br>

封裝? 繼承 多態(tài)

封裝

所謂封裝是把對(duì)象的屬性和行為結(jié)合在一個(gè)獨(dú)立的系統(tǒng)單位內(nèi)部

盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié),只向外部提供接口

繼承(inheritance):

也稱泛化状土,繼承性是子類自動(dòng)共享父類屬性和方法的機(jī)制无蜂,在定義和實(shí)現(xiàn)一個(gè)類的時(shí)候,可以在一個(gè)已經(jīng)存在的類的基礎(chǔ)之上來(lái)進(jìn)行声诸,把這個(gè)已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并加入自己若干新的內(nèi)容

多態(tài)(polymorphism):

指同一個(gè)命名可具有不同的語(yǔ)義

OO方法中退盯,常指在一般類中定義的屬性或方法被特殊類繼承之后彼乌,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為泻肯,對(duì)于子類,可用不同的方法替代實(shí)現(xiàn)父類的服務(wù)的方法

static關(guān)鍵字

可以修飾的元素

屬性

注意:只能修飾屬性慰照,不能修飾局部變量灶挟。

方法

代碼塊

static修飾屬性

所有對(duì)象共享,稱為靜態(tài)變量或類變量

不用static修飾的屬性稱為實(shí)例變量

static修飾方法

不需要實(shí)例化毒租,可以直接訪問稚铣,稱為靜態(tài)方法或類方法

static修飾語(yǔ)句塊

類中由static關(guān)鍵字修飾的,不包含在任何方法體中的代碼塊墅垮,稱為靜態(tài)代碼塊

*static修飾的屬性惕医、方法和代碼塊的特點(diǎn)

****用static修飾的屬性

它們?cè)陬惐惠d入時(shí)創(chuàng)建,只要類存在算色,static變量就存在抬伺。

靜態(tài)變量和非靜態(tài)變量的區(qū)別是:靜態(tài)變量被所有的對(duì)象所共享,在內(nèi)存中只有一個(gè)副本灾梦,它當(dāng)且僅當(dāng)在類初次加載時(shí)會(huì)被初始化峡钓。而非靜態(tài)變量是對(duì)象所擁有的,在創(chuàng)建對(duì)象的時(shí)候被初始化若河,存在多個(gè)副本能岩,各個(gè)對(duì)象擁有的副本互不影響。

直接訪問:類名.屬性

靜態(tài)方法

靜態(tài)方法不需要實(shí)例化萧福,可以直接訪問拉鹃,訪問方式:

直接訪問:類名.方法名()

實(shí)例化后訪問:對(duì)象名.方法名() (不建議使用)

靜態(tài)語(yǔ)句塊

一個(gè)類中由static關(guān)鍵字修飾的,不包含在任何方法體中的代碼塊

當(dāng)類被載入時(shí)统锤,靜態(tài)代碼塊被執(zhí)行毛俏,且只被執(zhí)行一次

靜態(tài)塊經(jīng)常用來(lái)進(jìn)行類屬性的初始化

用static修飾的方法和不用static修飾的方法調(diào)用上的區(qū)別:

package com.neuedu.test.chap06;

import java.util.UUID;

public class StaticDemo {

//網(wǎng)站訪問計(jì)數(shù)器

//如果要把他變成共享計(jì)數(shù)器 他的值會(huì)動(dòng)態(tài)變化

public static int count;

// 用static修飾的方法是靜態(tài)方法

public static String uudiUtil() {

// uuid生成器

return UUID.randomUUID().toString();

}

public StaticDemo() {

super();

System.out.println("構(gòu)造方法被調(diào)用");

}

//在類實(shí)例化時(shí)就調(diào)用

//會(huì)在所有方法(包括構(gòu)造方法)執(zhí)行前被調(diào)用

//他適合做一些基本初始化(準(zhǔn)備)工作

static{

System.out.println("我先被調(diào)用!");

}

public void print(){

System.out.println("print");

}

}

不用static修飾的方法調(diào)用是用:

第一步:把類實(shí)例化成對(duì)象

第二步:調(diào)用對(duì)象的方法


作業(yè):

本章課后作業(yè)

選做題1

1)設(shè)計(jì)一個(gè)類Student,該類包括姓名饲窿、學(xué)號(hào)和成績(jī)煌寇。

2)設(shè)計(jì)一個(gè)方法,按照成績(jī)從高到低的順序輸出姓名逾雄、學(xué)號(hào)和成績(jī)信息阀溶。

public class Student {

/*

* 1)設(shè)計(jì)一個(gè)類Student,該類包括姓名鸦泳、學(xué)號(hào)和成績(jī)银锻。

* 2)設(shè)計(jì)一個(gè)方法,按照成績(jī)從高到低的順序輸出姓名做鹰、學(xué)號(hào)和成績(jī)信息击纬。

*/

private String name;

private int id;

private int score;

public Student() {

super();

// TODO Auto-generated constructor stub

}

public Student(String name, int id, int score) {

super();

this.name = name;

this.id = id;

this.score = score;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public int getScore() {

return score;

}

public void setScore(int score) {

this.score = score;

}

//把成績(jī)亂序的數(shù)組轉(zhuǎn)化成按成績(jī)排序的數(shù)組

public void sortByScore(Student[] studs){

for(int i=1;i<studs.length;i++){

? for(int j=0;j<studs.length-i;j++){

? if(studs[j].getScore()<studs[j+1].getScore()){

? Student temp=studs[j];

? studs[j]=studs[j+1];

? studs[j+1]=temp;

? }

? }

}

}

public static void main(String[] args) {

Student s1=new Student("顧俊寧",100,84);

Student s2=new Student("李洋",101,94);

Student s3=new Student("王琦舒",102,66);

Student s4=new Student("高榮斌",104,82);

Student s5=new Student("劉元昊",105,98);

//System.out.println("s1---->"+s1);

//把上面四個(gè)學(xué)生放數(shù)組里

Student[] students=new Student[]{s1,s2,s3,s4,s5};

Student s=new Student();

s.sortByScore(students);

for(Student stu:students){

System.out.println(stu.getName());

System.out.println(stu.getScore());

System.out.println("----------->");

}

}

}

選做題

2、定義一個(gè)汽車類Vehicle钾麸,要求如下:[選做題]

2.1屬性包括:汽車品牌brand(String類型)更振、顏色color(String類型)和速度speed(double類型)炕桨,并且所有屬性為私有。

2.2至少提供一個(gè)有參的構(gòu)造方法(要求品牌和顏色可以初始化為任意值肯腕,但速度的初始值必須為0)献宫。

2.3為私有屬性提供訪問器方法。注意:汽車品牌一旦初始化之后不能修改实撒。

2.4定義一個(gè)一般方法run()姊途,用打印語(yǔ)句描述汽車奔跑的功能

2.5定義測(cè)試類VehicleTest,在其main方法中創(chuàng)建一個(gè)品牌為“benz”知态、顏色為“black”的汽車捷兰。

package com.neuedu.chap06.homework;

public class Vehicle {

private String brand;

private String color;

private double speed=0;

public Vehicle(String brand, String color) {

super();

this.brand = brand;

this.color = color;

this.speed = 0;

}

public String getBrand() {

return brand;

}

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

public double getSpeed() {

return speed;

}

public void setSpeed(double speed) {

this.speed = speed;

}

public static void main(String[] args) {

Vehicle y=new Vehicle("benz","black");

y.run();

}

public void run(){

System.out.println("顏色為:"+color+brand+"以"+speed+"的速度奔跑");

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市肴甸,隨后出現(xiàn)的幾起案子寂殉,更是在濱河造成了極大的恐慌,老刑警劉巖原在,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件友扰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡庶柿,警方通過(guò)查閱死者的電腦和手機(jī)村怪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)浮庐,“玉大人甚负,你說(shuō)我怎么就攤上這事∩蟛校” “怎么了梭域?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)搅轿。 經(jīng)常有香客問我病涨,道長(zhǎng),這世上最難降的妖魔是什么璧坟? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任既穆,我火速辦了婚禮,結(jié)果婚禮上雀鹃,老公的妹妹穿的比我還像新娘幻工。我一直安慰自己,他們只是感情好黎茎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布囊颅。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪踢代。 梳的紋絲不亂的頭發(fā)上先鱼,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音奸鬓,去河邊找鬼。 笑死掸读,一個(gè)胖子當(dāng)著我的面吹牛串远,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播儿惫,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼澡罚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了肾请?” 一聲冷哼從身側(cè)響起留搔,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铛铁,沒想到半個(gè)月后隔显,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饵逐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年括眠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倍权。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掷豺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出薄声,到底是詐尸還是另有隱情当船,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布默辨,位于F島的核電站德频,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏廓奕。R本人自食惡果不足惜抱婉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望桌粉。 院中可真熱鬧蒸绩,春花似錦、人聲如沸铃肯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至步藕,卻和暖如春惦界,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咙冗。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工沾歪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雾消。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓灾搏,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親立润。 傳聞我的和親對(duì)象是個(gè)殘疾皇子狂窑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容