java面向對象項目
❶ java中面向對象到底是什麼意思求解,謝謝。
Java面向對象思想和三大特性
面向對象:
1、面向對象
面向對象是一種程序設計思想,計算機程序的設計實質上就是將現實中的一些事物的特徵抽離出來描述成一些計算機事件的過程,這種抽象的過程中,我們把具體的事物封裝成一個一個的整體進行描述,使被描述的對象具備一些系統性、整體性的的行為和特徵,我們把這種設計思想稱為面向對象。
2、面向對象與面向過程
2.1、面向過程是早期的程序語言設計思想,該思想強調事物的行為細節,即程序的設計不需要封裝成一個個的整體,而是將整個程序描述成一個行為,所有行為細節都按照固定方式一步一步的執行,執行程序就是執行某一行為的過程。
2.2、面向對象和面向過程都是一種思想,面向對象是相對於面向過程而言的,
面向過程強調的是具體的功能行為,而面向對象將功能封裝進對象,強調具備了功能的對象,面向對象是基於面向過程的,但面向對象思想更接近於現實場景。
三大特性:
1、封裝
1.1、封裝是指:隱藏對象的屬性和實現細節,僅對外提供公共訪問方式
1.2、封裝的好處:
(1)將外界的變化隔離,使程序具備獨立、安全和穩定性。
(2)便於設計者使用,提高代碼的復用性
1.3、封裝的原則
(1)將不需要對外提供的內容都隱藏起來
(2)把實現細節隱藏,提供可以對其進行訪問公共的方式
1.4、封裝的方式
將某一功能、屬性抽離出來,獨立寫成單獨的方法或類
設置訪問許可權
(1)設置訪問許可權可以限定該功能或屬性可以被特定的訪問者訪問,保證了程序的安全性和功能的穩定性。
(2)java對類和類中成員都定義了特定的訪問修飾符
類:public(公共的)、default(默認的,不寫就默認是它)
類中成員:public、protected、default(默認的)、private
註:類的訪問修飾符可以不寫(默認的),也可以寫public(公共的),一個java文件中只能有一個被public修飾的類,且被public修飾的類類名必須要跟文件名一致(包括大小寫一致),否則編譯會出錯,為了方便閱讀,類名的命名規范是單詞的首字母大寫,多個單片語成的類名每個單詞的首字母都大寫
2、繼承
2.1、繼承是從已有的類中派生出新的類,新的類能吸收已有類的數據屬性和行為,並能擴展新的功能,或者說將事物的共性的功能和屬性抽取出來定義成一個父類,讓後來具有更多樣化實現的子類繼承父類。
2.2、繼承的作用:
(1)父類具備的方法子類可以直接繼承過來,不用重新書寫,提高了代碼的復用性
(2)讓類與類之間產生關系,有了關系才有多態的實現
(3)Java中只支持單繼承,不支持多繼承,因為多繼承存在安全隱患(當多個父類存在同個功能時,子類不確定要運行哪一個),Java支持多層繼承,即父類還可以繼承其他類,java用另一種機制解決單繼承的局限性,即多實現
2.3、對繼承體系的使用
(1)想要使用體系,應該先查閱父類,因為父類定義了該體系的共性功能,了解了父類的功能,就基本可以使用該體系的功能了
(2)在具體調用時,要創建子類的對象,因為有可能當父類是抽象類時父類不能創建對象,而且子類具備更豐富、更具體的功能實現
2.4繼承的特點
2.4.1覆蓋(重寫)
2.4.1.1如果子父類中的成員一致時,子類成員會覆蓋父類成員
2.4.1.2當子類繼承父類時,沿襲父類的功能到子類中,但子類對該功能的實現細節不一致,子類可以保留父類對該功能的定義,重寫功能的內容
2.4.1.3覆蓋與重載:重載只看參數列表,其他一致參數列表不一致為重載,而重寫子父類的參數必須要一致
2.4.2this與super
this表示當前對象的引用,super表示當前對象父類的引用
2.5子父類中的構造函數
2.5.1構造函數不能重寫
2.5.1.1構造函數第一行有一條隱式的語句super()/this()
2.5.1.2在對子類對象進行初始化時,父類構造函數也會運行,因為子類中的構造函數默認第一行有一條隱式的super()語句,這樣方便子類構造時先獲取到父類的共性屬性
2.5.1.3super()一定要定義在子類構造函數的第一行,當沒有默認的空參數構造函數,要手動指定
2.6、注意事項:
2.6.1千萬別為了獲取其他類中的功能而繼承,必須是類與類間有所屬關系才可以繼承。
2.6.2子類覆蓋父類時必須保證子類許可權大於等於父類,才可以覆蓋,否則編譯失敗
2.6.3子類靜態成員只能覆蓋父類靜態成員
2.7final關鍵字
2.7.1final關鍵字可以修飾類、函數和變數
2.7.2被final修飾的類不可以被繼承(繼承打破了封裝性)
2.7.3被final修飾的方法不可以被復寫
2.7.4被final修飾的變數只能被賦值一次,既可以修飾成員變數,也可以修飾
2.8Object類
2.8.1java中有一個特殊的類,Object類,它是所有對象的超類(根類),Object類中定義了所有對象的共性成員
2.8.2Object類中的方法
equals()比較兩個對象是否相同
toString()返回該對象的字元串表示形式
getClass()獲取該對象對應的位元組碼文件對象
hasCode()獲取該對象的哈希碼值
2.9類間的體系關系
繼承、聚集(聚合)、組合
2.9.1繼承:
指的是一個類繼承另外的一個類的功能,並增加它自己的新功能或改寫舊有功能的具體實現,繼承是類與類之間最常見的關系。
2.9.2聚合:
指的是整體與部分的關系。通常在定義一個整體類後,再去分析這個整體類的組成結構。從而找出一些組成類,該整體類和組成類之間就形成了聚合關系。例如足球隊中的足球隊員就是聚合關系。
2.9.3組合:
也表示類之間整體和部分的關系,但是組合關系中部分和整體具有統一的生存期。一旦整體對象不存在,部分對象也將不存在。部分對象與整體對象之間具有共生死的關系。例如人的各個身體器官之間的關系。
3、多態
3.1、多態的定義;某一類事物具備的多種表現形態(貓、狗和動物)
3.2、java中多態的表現形式
父類的引用指向自己的子類對象
父類的引用接收自己的子類對象
3.3、多態的前提
必須是類與類之間有關系,要麼繼承,要麼實現
子父類間的成員存在覆蓋
3.4、多態的好處與缺陷
好處是提高了程序的擴展性,缺陷是只能使用父類的引用訪問父類的方法,無法訪問子類的特有方法。
3.5、多態的應用
類型轉換
向上轉型,自然轉型
向下轉型,強制父類引用向下轉型
3.6、特點
(1)多態中成員函數的特點
編譯時看引用變數所屬的類中是否有方法
運行時看對象所屬類的方法
(2)多態中成員變數的特點
無論編譯或運行時都參看右邊
多態中靜態成員函數的特點
編譯或運行時都參看左邊
3.7、多態的擴展示例
資料庫操作(各種資料庫):定義資料庫的父類型,由哪類型的資料庫調用就由該子類實現其具體操作內容。
我有一個微信公眾號,每天都會分享一些Java相關的干貨文章,還有海量學習資源。
如果你喜歡我的分享,可以用微信搜索「Java團長」或者「javatuanzhang」關注。
❷ java: 談談你對面向對象的理解
java萬事萬物皆對象(一種理念;只可意會,不可言傳!)。
對象是數據與只能處理這些數據的方法的封裝(一個原子單元),類是程序員提供給系統的一類對象相似的對象的描述(描述),程序開始運行之時,想一下程序中是不是未存在任何對象,就連對象的聲明(用代碼表示具體的對象)也沒有,單單就存在對象描述模板(即是:類),所以我們可以通過模板,叫系統new(構造)一個具體的對象來使用。
特別提醒一點:千萬要揣摩一下這句話(對象是數據與只能處理這些數據的方法的封裝)。
具體可以結合面向對象的四大特徵進行理解:封裝 繼承 多態 抽象
❸ 請問用java語言寫的項目,畢業論文可以按面向過程的結構來寫嗎
按面向過程寫的話,需求不能有大的改動,要不然可能牽一發動全身,因為面向過程的耦合度太高了;也就是說需求要一開始就比較明確;
既然用Java寫項目,還是用面向對象好一些,畢竟Java在面向對象編程方面有優勢;面向對象可讀性較高,好修改和維護;
❹ java 面向對象
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Score s = new Score();
System.out.println("最大值:"+s.getMax());
System.out.println("最小值:"+s.getMin());
System.out.println("平均值:"+s.getAvg());
System.out.println("均方差值:"+s.getVar());
}
}
class Score{
private double max;//最大值
private double min;//最小值
private double avg;//平均值
private double var;//均方差
double[] d;//成績數組
public Score() {
Scanner input = new Scanner(System.in);
System.out.println("請輸入數組的長度");
int length= input.nextInt();
double[] dd=new double[length];
for (int i = 0; i < dd.length; i++) {
System.out.println("請輸入第們課"+(i+1)+"的成績");
dd[i]=input.nextDouble();
}
this.d=dd;
}
public double getMax() {
max=d[0];
for (int i = 1; i < d.length; i++) {
if (d[i]>max) {
max=d[i];
}
}
return max;
}
public double getMin() {
min=d[0];
for (int i = 1; i < d.length; i++) {
if (d[i]<min) {
min=d[i];
}
}
return min;
}
public double getAvg() {
double sum=0;
for (int i = 0; i < d.length; i++) {
sum+=d[i];
}
avg=sum/d.length;
return avg;
}
public double getVar() {
double avg =getAvg();
for (int i = 0; i < d.length; i++) {
var+=(Math.pow((avg-d[i]), 2));
}
var=Math.pow(var,0.5);
return var;
}
}
❺ java動物特性的面向對象描述 項目
定義LandAnimal介面和WaterAnimal介面 ,只定義個介面好定義,只是你的題目用不到啊。(沒水生和陸生啊)
下面是定義的ANIMAL類,實現了他們共有的屬性。CAT,FROG沒說出來啊,自己定義吧。
public class ANIMAL {
public String name;
public boolean mammal; // 哺乳動物
public boolean carnivorous;// 肉食動物
public String mood;
public int logs;
public void setName(String name) {
this.name = name;
}
public void setMammal(boolean mammal) {
if (mammal) {
System.out.println(name + "是哺乳動物");
} else {
System.out.println(name + "不是哺乳動物");
}
}
public void setCarnivorous(boolean carnivorous) {
if (carnivorous) {
System.out.println(name + "是肉食動物");
} else {
System.out.println(name + "不是肉食動物");
}
}
public void setMood(String mood1, String mood2, String mood3) {
System.out.println(name + "通常的情況下,和人打招呼的方式為:" + mood1);
System.out.println(name + "被撫摸情緒好的時候,打招呼的方式是:" + mood2);
System.out.println(name + "煩躁的時候會:" + mood2);
}
public void setLogs(int logs){
System.out.println(name+"有"+logs+"條腿");
}
}
下面是 狗的那個類繼承類ANIMAL:
public class Dog extends ANIMAL{
public Dog(){
}
public static void main(String[] args) {
ANIMAL dog = new Dog();
dog.setName("狗");//設置動物名字
dog.setMammal(true);//設置是否Mammal
dog.setCarnivorous(true);//設置是Carnivorous
dog.setMood("搖搖尾巴", "旺旺叫", "嗚嗚叫");//設置 在3種不同情況下的動作
dog.setLogs(4);
}
}
輸出:
狗是哺乳動物
狗是肉食動物
狗通常的情況下,和人打招呼的方式為:搖搖尾巴
狗被撫摸情緒好的時候,打招呼的方式是:旺旺叫
狗煩躁的時候會:旺旺叫
狗有4條腿
其他的動物 同樣的原理。
補充:
public interface LandAnimal {
}
public interface WaterAnimal {
}
你的輸出內容中 沒用的到 (沒有顯示這兩個介面有關信息,沒有說明他是水生,陸生)
如果是狗的 那麼直接 那個類 implements LandAnimal
public class Dog extends ANIMAL implements LandAnimal{}就行了 ,說明他是陸生的一種標志
這樣就像 java.io.Serializable這個介面 ,一種標志。
❻ Java面向對象程序設計 這句話中的對象指的是什麼
對象是類的實例的意思
面向對象
面向對象是一種新興的程序設計方法,或者說它是一種新的程序設計范型,其基本思想是使用對象,類,繼承,封裝,消息等基本概念來進行程序設計。
它是從現實世界中客觀存在的事物(即對象)出發來構造軟體系統,並在系統構造中盡可能運用人類的自然思維方式,強調直接以問題域(現實世界)中的事物為中心來思考問題,認識問題,並根據這些事物的本質特點,把它們抽象地表示為系統中的對象,作為系統的基本構成單位(而不是用一些與現實世界中的事物相關比較遠,並且沒有對應關系的其它概念來構造系統)。這可以使系統直接地映射問題域,保持問題域中事物及其相互關系的本來面貌。
它可以有不同層次的理解:
從世界觀的角度可以認為:面向對象的基本哲學是認為世界是由各種各樣具有自己的運動規律和內部狀態的對象所組成的;不同對象之間的相互作用和通訊構成了完整的現實世界。因此,人們應當按照現實世界這個本來面貌來理解世界,直接通過對象及其相互關系來反映世界。這樣建立起來的系統才能符合現實世界的本來面目。
從方法學的角度可以認為:面向對象的方法是面向對象的世界觀在開發方法中的直接運用。它強調系統的結構應該直接與現實世界的結構相對應,應該圍繞現實世界中的對象來構造系統,而不是圍繞功能來構造系統。
從程序設計的角度來看,面向對象的程序設計語言必須有描述對象及其相互之間關系的語言成分。這些程序設計語言可以歸納為以下幾類:系統中一切皆為對象;對象是屬性及其操作的封裝體;對象可按其性質劃分為類,對象成為類的實例;實例關系和繼承關系是對象之間的靜態關系;消息傳遞是對象之間動態聯系的唯一形式,也是計算的唯一形式;方法是消息的序列。
❼ java是什麼東西
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程 。
Java具有簡單性、面向對象、分布式、健壯性、安全性、平台獨立與可移植性、多線程、動態性等特點 。Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等 。
Java的工作原理由四方面組成:
(1)Java編程語言
(2)Java類文件格式
(3)Java虛擬機
(4)Java應用程序介面
當編輯並運行一個Java程序時,需要同時涉及到這四種方面。使用文字編輯軟體(例如記事本、寫字板、UltraEdit等)或集成開發環境(Eclipse、MyEclipse等)在Java源文件中定義不同的類 ,通過調用類(這些類實現了Java API)中的方法來訪問資源系統,把源文件編譯生成一種二進制中間碼,存儲在class文件中,然後再通過運行與操作系統平台環境相對應的Java虛擬機來運行class文件,執行編譯產生的位元組碼,調用class文件中實現的方法來滿足程序的Java API調用 。
❽ java使用面向對象寫一個登錄注冊查詢的功能
import java.util.Scanner;/**
* 採用面向對象的方式 寫一個登錄系統
* @author Administrator
*
*///用戶信息class UserInfo{ public static String[] user = new String[10]; public static String[] passwd = new String[10];
public UserInfo() { this.user[0] = "test"; this.passwd[0] ="123456";
}
}//找回密碼class ZhaoHui extends UserInfo{ public static void zhaohui() {
Scanner s = new Scanner(System.in);
System.out.println("請輸入你要找回的用戶名:");
String zname = s.nextLine(); for(int i=0;i<2;i++) { if(user[i].equals(zname)) {
Scanner ss = new Scanner(System.in);
System.out.println("恭喜你!成功找回密碼,請輸入:"+"'張哥最帥'"+" 查看密碼");
String zgzs = ss.nextLine();
if("張哥最帥".equals(zgzs)) {
System.out.println(passwd[i]);
}else {
System.out.println("請輸正確!");
}
}else if(user[i]!=zname){
System.out.println("用戶名不存在!"); return;
}
break;
}
}
}//修改密碼 class XiuGai extends UserInfo{ public static void xiugai() {
Scanner s =new Scanner(System.in);
System.out.println("請輸入您要修改的密碼:");
String xpasswd = s.nextLine(); for(int i=0;i<2;i++) {
passwd[i] = xpasswd; if(xpasswd.equals(passwd[i])) {
System.out.println("恭喜你,修改成功!"); break;
}else {
System.out.println("修改密碼失敗"); break;
}
}
}
}//查詢用戶class ChaXun extends UserInfo{
public static void select() { for(int i=0;i<2;i++) {
System.out.println("當前用戶:"+user[i] +"\n"+ "當前密碼:"+passwd[i] );
i++; break;
}
}
}//注冊class ZhuCe extends UserInfo{
public static void regist() {
Scanner ss = new Scanner(System.in);
System.out.println("請輸入用戶名:");
String suser = ss.nextLine();
System.out.println("請輸入密碼:");
String spasswd = ss.nextLine();
for(int i=0;i<user.length;i++) {
user[i] = suser;
passwd[i] = spasswd;
System.out.println("注冊成功!"); break;
}
}
}//登錄class Loginc extends UserInfo{
public static void login() { int flag = 1;
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入用戶名:");
String users = scanner.nextLine();
System.out.println("請輸入密碼:");
String passwds = scanner.nextLine();
for(int i=0;i<UserInfo.user.length;i++) { if(user[i].equals(users) && passwd[i].equals(passwds)) {
System.out.println("登陸成功!"); break;
}
System.out.println("登陸失敗!"); break;
}
}
}//主界面class ZhuJieMian{ public static void Start() {
Loginc Loginc = new Loginc();
ZhuCe ZhuCe = new ZhuCe();
ChaXun ChaXun = new ChaXun();
XiuGai XiuGai = new XiuGai();
ZhaoHui ZhaoHui = new ZhaoHui();
Scanner s = new Scanner(System.in); while(true) {
System.out.println("|"+ "\t"+ "\t"+ "\t"+ "\t"+ "\t"+ "\t"+ "\t"+"\t"+"|");
System.out.println("|"+"\t" + "測試用戶名:test 測試密碼:123456" + "\t"+ "\t"+ "\t"+ "\t"+"|");
System.out.println("|" + "\t"+ "請輸入[1-5]進行操作 1.登錄|2.注冊|3.查詢當前用戶|4.修改密碼|5.找回密碼 " + "\t"+"|");
System.out.print("請輸入:"); int temp = s.nextInt();
switch(temp) { case 1:Loginc.login(); break; case 2:ZhuCe.regist();; break; case 3:ChaXun.select();; break; case 4:XiuGai.xiugai();; break; case 5:ZhaoHui.zhaohui();; break; default:System.out.println("錯誤!請重寫輸入正確的數字進行操作!");
}
}
}
}public class LoginTest { public static void main(String[] args) {
ZhuJieMian zjm = new ZhuJieMian();
zjm.Start();
}
}
❾ 介紹一下java的面向對象
1、面向對象
面向對象(Object Oriented)是一種新興的程序設計方法,或者是一種新的程序設計規范(paradigm),其基本思想是使用對象、類、繼承、封裝、多態等基本概念來進行程序設計。從現實世界中客觀存在的事物(即對象)出發來構造軟體系統,並且在系統構造中盡可能運用人類的自然思維方式。
2、對象
對象是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。一個對象由一組屬性和對這組屬性進行操作的一組服務組成。
類的實例化可生成對象,一個對象的生命周期包括三個階段:生成、使用、消除。
當不存在對一個對象的引用時,該對象成為一個無用對象。Java的垃圾收集器自動掃描對象的動態內存區,把沒有引用的對象作為垃圾收集起來並釋放。當系統內存用盡或調用System.gc( )要求垃圾回收時,垃圾回收線程與系統同步運行。
3、類
類是具有相同屬性和方法的一組對象的集合,它為屬於該類的所有對象提供了統一的抽象描述,其內部包括屬性和方法兩個主要部分。在面向對象的編程語言中,類是一個獨立的程序單位,它應該有一個類名並包括屬性和方法兩個主要部分。
Java中的類實現包括兩個部分:類聲明和類體。
類聲明
繼承
子類的對象擁有父類的全部屬性與方法,稱作子類對父類的繼承。
Java中父類可以擁有多個子類,但是子類只能繼承一個父類,稱為單繼承。
繼承實現了代碼的復用。
Java中所有的類都是通過直接或間接地繼承java.lang.Object類得到的。
子類不能繼承父類中訪問許可權為private的成員變數和方法。
子類可以重寫父類的方法,即命名與父類同名的成員變數。
Java中通過super來實現對父類成員的訪問,super用來引用當前對象的父類。super 的使用有三種情況:
訪問父類被隱藏的成員變數,如:super.variable;
調用父類中被重寫的方法,如:super.Method([paramlist]),super()調用父類構造方法;
調用父類的構造函數,如:super([paramlist]);
多態
對象的多態性是指在父類中定義的屬性或方法被子類繼承之後,可以具有不同的數據類型或表現出不同的行為。這使得同一個屬性或方法在父類及其各個子類中具有不同的語義。例如:"幾何圖形"的"繪圖"方法,"橢圓"和"多邊形"都是"幾何圖"的子類,其"繪圖"方法功能不同。
Java的多態性體現在兩個方面:由方法重載實現的靜態多態性(編譯時多態)和方法重寫實現的動態多態性(運行時多態)。
編譯時多態:在編譯階段,具體調用哪個被重載的方法,編譯器會根據參數的不同來靜態確定調用相應的方法。
運行時多態:由於子類繼承了父類所有的屬性(私有的除外),所以子類對象可以作為父類對象使用。程序中凡是使用父類對象的地方,都可以用子類對象來代替。一個對象可以通過引用子類的實例來調用子類的方法。
重載(Overloading)
方法重載是讓類以統一的方式處理不同數據類型的手段。
一個類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法。
返回值類型可以相同也可以不相同,無法以返回型別作為重載函數的區分標准。
重寫(Overriding)
子類對父類的方法進行重新編寫。如果在子類中的方法與其父類有相同的的方法名、返回類型和參數表,我們說該方法被重寫 (Overriding)。
如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
子類函數的訪問修飾許可權不能低於父類的。