7、java中的面向对象思想和体现
???? ? java是一種面向對象的程序設計語言,在程序中使用對象來描述具體的事物,當多個事物具有共同的特點時,可以將事物的共同特點進行抽象,然后封裝成一個包含事物共同特點的集合,在java中叫做封裝成一個類,可以將面向對象的主要特點是(抽象)封裝、繼承和多態。
封裝
?????? 所謂抽象,就是將一些具體的事物之間存在的共同之處抽取出來,然后形象化的描述,在java中抽象的過程就是將事物共同的靜態屬性和動態屬性封裝成類的過程,事物的靜態屬性可以抽象成變量,動態屬性則可以封裝成一個方法(函數),封裝是面向對象的核心思想,封裝指的的是將對象的屬性和動作進行封裝,對外隱藏本身的實現細節。例如:狗、貓,可以找他們之間的共同點,都有顏色這一屬性,則可以封裝一個顏色屬性到類中;再者他們都要吃飯,則可以封裝一個吃飯的方法到類中,不管是狗還是貓,我們只需要知道他們能吃飯就可以了,并不需要具體了解他們吃飯的具體步驟,這就是對外開放但是隱藏本身的實現細節。
?類、方法、變量
??????? 定義類、變量和方法時都會用到權限修飾符:public、protected、default、private,被public修飾的變量和方法可以隨便訪問;被protected、private修飾的變量和方法只能在當前類中使用。
??????? 類中可以包含變量和方法,具體的實現代碼必須要寫在具體的方法中,變量又分為局部變量和成員變量,方法中聲明的變量就是局部變量,類里邊、方法外邊聲明的變量就是成員變量,變量的定義包含以下部分:修飾符、變量類型、變量名 ,代碼如下:
public class Dog{//變量的聲明//private 私有修飾符//int 變量類型//color 變量名private int color;}方法的定義包含以下部分:修飾符、返回值類型(構造方法除外)、方法名、方法體。類中的方法根據功能劃分可分為兩類,一類時構造方法、另一類是普通的方法,構造方法用來構造當前類的對象,初始化對象的屬性,而普通的方法就是根據對象動態屬性抽象過來的方法。代碼如下:
public class Animal {public String color;/*** 構造方法,沒有返回值,方法名和類名相同,可用于初始化類中封裝的變量*/public Animal(String color) {//this.color中的color指的是當前類中的變量//第二個color是局部變量color的值//this關鍵字可用于表示當前類this.color = color;}/*** 普通方法,int是返回值類型,eat是方法名 */public int eat() {//局部變量int flag = 0;System.out.println("Animal在吃飯。。。");return flag;//返回值}}定義方法時可以調用其他的方法,方法可以被重載,一個類中不可以定義完全相同的兩個方法,但是可以定義兩個方法名相同但是參數列表不同的方法,這兩個方法的關系就是重載,代碼如下:
public class Animal {/** 兩個方法的方法名相同參數列表不同則兩個方法重載,和返回值無關,方法可以重載多個*/public void eat() {}public int eat(int flag) {return flag;}public void eat(String flag) {} }每一個類就相當于一個模板,可以根據這個模板創造出具體的對象,在java中使用new關鍵字來創建對象,使用 “.” 來調用類中公開的方法和變量代碼如下:
class Animal {public int flag;public void eat() {System.out.println("正在吃飯");}}public class Test {public static void main(String[] args) {Animal animal = new Animal();//創建對象animal.eat();//調用方法}}繼承、抽象類、接口
?????? 當一個類被封裝后,一般不鼓勵二次封裝,一般當類的功能不足以支持當前需求時,我們會考慮對此類進行擴展,java中可以使用繼承來實現這一想法。例如這里有類A,類中有一個計算四邊形周長的方法,但是現在想計算正方形的周長,雖然計算四邊形周長的方法可以用于計算正方形,但是想實現的簡單點,就可以再封裝一個類B,然后B繼承類A,在java中用關鍵字extends來表示繼承,B extends A,這就叫做類B繼承自類A,A是B的父類,B是類A的子類,然后可以在B中重新聲明一個方法用來計算正方形的周長。子類可以使用父類所有公開的屬性和方法,每一個類只能繼承一個父類(例如:在血緣關系上,一個兒子只有一個父親),所以java中是單繼承。再如上邊的計算四邊形的方法,如果在子類中聲明一個方法,此方法與父類中的方法完全相同,這就是方法的重寫。代碼如下:
public class Animal {public int flag;public void eat() {//這里已經聲明了eat方法System.out.println("正在吃飯");}}-----------------------------------------------------------------------------------//Dog類繼承了Animal類,擁有了Animal類的公開的功能 public class Dog extends Animal{@Override//這個注解的意思是重寫方法public void eat() {//重寫父類方法System.out.println("Dog在吃飯。。。");} }???????? 在寫代碼的過程中,聲明了一個方法,但是不知如何實現,這時可以將方法體刪掉,然后使用修飾符abstract 來修飾這個方法,這個方法就叫做抽象方法,如果一個類中存在抽象方法,那么這個類必須使用abstract修飾,以將此類標記成抽象類,如果一個類中的所有方法都是抽象的,那么這個類就可以聲明成一個接口,使用interface 來聲明接口。抽象類和接口都不可以實例化(就是指不可以使用new關鍵字來創建對象)。抽象類可以被繼承,如果子類聲明的不是抽象類,那么就必須重寫繼承的抽象父類中的所有抽象方法。接口可以被實現,使用implements 關鍵字進行接口的實現,實現接口的類如果不聲明成抽象類,就必須重寫實現接口中所有的方法,一個類不可以繼承多個類,但是可以實現多個接口,這樣就解決的java單繼承的尷尬。代碼如下:
//聲明接口 interface public interface Animal {//聲明一個方法public abstract void run();}//聲明接口 interface interface Animal2 {//聲明一個方法public abstract void eat();}------------------------------------------------------------------------------//實現Animal,Animal2接口,重寫接口中的方法,如果多個接口,則每一個接口中的方法都要實現 public class Dog implements Animal ,Animal2{@Overridepublic void eat() {System.out.println("dog eat ...");}@Overridepublic void run() {// TODO Auto-generated method stub}}static、final
???????? static關鍵字意為靜態的意思,static可以修飾變量、方法、代碼塊,只需要記住一點:被static修飾的屬性和方法是所有根據當前類創建的對象所共享的,一個對象做出修改,其他對象就會修改,在內存中只有一份。
???????? final關鍵字意為最終之意,final可用來修飾類、方法、變量,被修飾的類不可被繼承、被修飾的方法不能重寫、被修飾的變量不能重新賦值。秩序記住一點,只要被final修飾,什么東西就都不能改了,保持最終的狀態。
多態
???????? 最后說一下多態的理解,所謂多態就是多種狀態,統一類的不同對象所表現的不同的狀態,就是父類(接口)的引用指向子類(實現類)的對象,實現多態有以下幾中方式 :繼承類、實現接口。例如封裝一個動物類,類中有動物的顏色這一變量、動物吃飯方法,然后分別封裝狗類和貓類,然后狗類和貓類都繼承動物類,這時我聲明一個動物類的變量,然后創建對象的時候,將此變量指向一個狗的對象,以為狗屬于動物(狗類繼承自動物類),這時動物就表現出了多態性,創建誰的對象,這個動物就會表現出誰的狀態。代碼實現如下:
public class Animal {public String color;public void eat() {System.out.println("Animal在吃飯。。。");}}-------------------------------------------------------------------------------------public class Dog extends Animal{@Overridepublic void eat() {System.out.println("Dog在吃飯。。。");} }class Cat extends Animal{@Overridepublic void eat() {System.out.println("Cat在吃飯。。。");} }-------------------------------------------------------------------------------------public class Test {public static void main(String[] args) {normal();//正常執行,不表現多態poly(); //表現多態}/*** 正常調用* @author chaizepeng**/public static void normal() {Animal animal = new Animal();animal.eat();Dog dog = new Dog();dog.eat();Cat cat = new Cat();cat.eat();}/*** 表現出多態性* @author chaizepeng**/public static void poly() {Animal animalDog = new Dog();animalDog.eat();Animal animalCat = new Cat();animalCat.eat();} }?
總結
以上是生活随笔為你收集整理的7、java中的面向对象思想和体现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初中生考不上高中怎么办 可以参考以下的方
- 下一篇: 素数的概念 素数的概念是什么