亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
4)過濾有效數(shù)據(jù)" >4)過濾有效數(shù)據(jù)
5)總結(jié)" >5)總結(jié)
1)程序中的繼承" >1)程序中的繼承
2)父類的選擇" >2)父類的選擇
3)繼承" >3)繼承
4)繼承的特點" >4)繼承的特點
5)不可繼承" >5)不可繼承
1)方法的重寫/覆蓋" >1)方法的重寫/覆蓋
2)方法重寫與方法重載的區(qū)別" >2)方法重寫與方法重載的區(qū)別
1)super關(guān)鍵字" >1)super關(guān)鍵字
2)super調(diào)用父類無參構(gòu)造" >2)super調(diào)用父類無參構(gòu)造
3)super調(diào)用父類有參構(gòu)造" >3)super調(diào)用父類有參構(gòu)造
4)this與super" >4)this與super
1)多態(tài)的應(yīng)用" >1)多態(tài)的應(yīng)用
首頁 Java Java基礎(chǔ) java有哪三大特性

java有哪三大特性

Jan 06, 2023 pm 02:30 PM
java

java的三大特性是:1、封裝,就是將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問,而是通過該類提供的方法來實現(xiàn)對隱藏信息的操作和訪問。2、繼承,就是子類擁有父類的所有屬性和方法,從而實現(xiàn)了實現(xiàn)代碼的復(fù)用。3、多態(tài),就是父類引用指向子類對象,從而產(chǎn)生多種形態(tài)。

java有哪三大特性

本教程操作環(huán)境:windows7系統(tǒng)、java8版、DELL G3電腦。

Java的三大特性

面向?qū)ο笕筇匦裕悍庋b、繼承、多態(tài)。

封裝:

  • 將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問,而是通過該類提供的方法來實現(xiàn)對隱藏信息的操作和訪問。

繼承:

  • 子類擁有父類的所有屬性和方法(除了private修飾的屬性不能擁有),從而實現(xiàn)了實現(xiàn)代碼的復(fù)用;

多態(tài):

  • 使用父類引用接受,不同的子類的對象實例,父類引用調(diào)用相同的方法,根據(jù)子類不同的實例,產(chǎn)生不同的結(jié)果

1、封裝

1)什么是封裝

概念:盡可能隱藏對象的內(nèi)部實現(xiàn)細(xì)節(jié),控制對象的修改及訪問的權(quán)限。

訪問修飾符:private (可將屬性修飾為私有,僅本類可見)

2)公共訪問方法

以訪問方法的形式,進而完成賦值與取值操作。

問題:依舊沒有解決到非法數(shù)據(jù)錄入!

  • 提供公共訪問方法,以保證數(shù)據(jù)的正常錄入。
  • 命名規(guī)范:
  • 賦值:setXXX() //使用方法參數(shù)實現(xiàn)賦值
  • 取值:getXXX() //使用方法返回值實現(xiàn)取值

3)示例

public static void main(String[] args) {
		int a;
		Num num = new Num();
//		傳入值100
		num.setNum(100);
		System.out.println(num.getNum());
	}
private int a;

//	在調(diào)用get方法時,返回本類a的值
	public int getNum() {
		return a;
	}

//	接受傳入的值100,并賦值給本類的a
	public void setNum(int num) {
		this.a = num;
	}

4)過濾有效數(shù)據(jù)

在公共的訪問方法內(nèi)部,添加邏輯判斷,進而過濾掉非法數(shù)據(jù),以保證數(shù)據(jù)安全。

5)總結(jié)

get/set方法是外界訪問對象私有屬性的唯一通道,方法內(nèi)部可對數(shù)據(jù)進行檢測和過濾。

2、繼承

1)程序中的繼承

  • 程序中的繼承,是類與類之間特征和行為的一種贈與或獲得。
  • 兩個類之間的繼承關(guān)系,必須滿足“is a”的關(guān)系。

2)父類的選擇

  • 現(xiàn)實生活中,很多類別之間都存在著繼承關(guān)系,都滿足“is a”的關(guān)系。

  • 狗是一種動物、狗是一種生物、狗是一種物質(zhì)。

  • 多個類別都可作為“狗”的父類,需要從中選擇出最適合的父類。

  • 功能越精細(xì),重合點越多,越接近直接父類。

  • 功能越粗略,重合點越少,越接近Object類。(萬物皆對象的概念)

3)繼承

語法:class 子類 extends 父類{ } //定義子類時,顯示繼承父類

public class 子類名 extends 父類名{
	
	//代碼塊
	}

應(yīng)用:產(chǎn)生繼承關(guān)系之后,子類可以使用父類中的屬性和方法,也可定義子類獨有的屬性和方法。

好處:既提高代碼的復(fù)用性,又提高代碼的可擴展性。

4)繼承的特點

Java為單繼承,一個類只能有一個直接父類,但可以多級繼承,屬性和方法逐級疊加。

5)不可繼承

構(gòu)造方法:類中的構(gòu)造方法,只負(fù)責(zé)創(chuàng)建本類對象,不可繼承。

private修飾的屬性和方法:訪問修飾符的一種,僅本類可見。

父子類不在同一個package中時,default修飾的屬性和方法:訪問修飾符的一種,僅同包可見。

3、方法重寫

1)方法的重寫/覆蓋

方法重寫原則:

  • 方法名稱、參數(shù)列表與父類相同。
  • 返回值類型必須與父類相同或其子類
  • 訪問修飾符可與父類相同或是比父類更寬泛。

方法重寫的執(zhí)行:

  • 子類重寫父類方法后,調(diào)用時優(yōu)先執(zhí)行子類重寫后的方法。

  • 方法重寫的特性:

    子類重寫父類方法時子類方法會覆蓋父類方法。

    子類重寫父類方法,訪問級別不能嚴(yán)于父類方法。

    子類重寫方法名和類型與父類一樣。

    父類的構(gòu)造方法無法重寫,只能被覆蓋。

示例:

//父類
public class Animal {
//	父類中吃的方法會輸出“玩玩玩”
	public void play() {
		System.out.println("玩玩玩");
	}

//	父類中睡的方法會輸出“睡睡睡”
	public void sleep() {
		System.out.println("睡睡睡");
	}

}
/**
 * 狗類繼承 父類
 */
public class Dog extends Animal {

//	進行方法重寫,將方法重寫輸出為“狗玩飛碟”
	public void play() {
		System.out.println("狗玩飛碟");
	}
}
public class Test {

	public static void main(String[] args) {
		// 實例化寵物對象
		Dog d = new Dog();
		d.play();
		d.sleep();
	}

}

運行輸出:

在這里插入圖片描述

2)方法重寫與方法重載的區(qū)別

相同點:方法名相同
不同點:
重載:參數(shù)列表不同,返回值與訪問修飾符無關(guān)
重寫:參數(shù)列表相同,返回值相同或其子類,訪問修飾符不能比父類更嚴(yán)

4、super關(guān)鍵字

1)super關(guān)鍵字

super關(guān)鍵字可在子類中訪問父類的方法。

  • 使用”super.”的形式訪問父類的方法,進而完成在子類中的復(fù)用;
  • 再疊加額外的功能代碼,組成新的功能。

2)super調(diào)用父類無參構(gòu)造

super():表示調(diào)用父類無參構(gòu)造方法。如果沒有顯示書寫,隱式存在于子類構(gòu)造方法的首行。

3)super調(diào)用父類有參構(gòu)造

super():表示調(diào)用父類無參構(gòu)造方法。

super(實參):表示調(diào)用父類有參構(gòu)造方法。
參構(gòu)造被執(zhí)行

4)this與super

this或super使用在構(gòu)造方法中時,都要求在首行。
當(dāng)子類構(gòu)造中使用了this()或this(實參),即不可再同時書寫super()或super(實參),會由this()指向構(gòu)造方法完成super()調(diào)用。

class A{
		public A(){
		System.out.println(( "A-無參構(gòu)造"));
		}
		public A(int value) {
		System.out.println(("A-有參構(gòu)造")); 
		}
		}
		class B extends A{
		public B(){
		super();
		System.out.println( "B-無參構(gòu)造");
		}
		public B(int value) {
//		super();這兩貨不能跟同時存在
		this();
		System.out.println(("B-有參構(gòu)造"));
		}
		}

5、多態(tài)

概念:父類引用指向子類對象,從而產(chǎn)生多種形態(tài)。

二者具有直接或間接的繼承關(guān)系時,父類引用可指向子類對象,即形成多態(tài)。

父類引用僅可調(diào)用父類所聲明的屬性和方法,不可調(diào)用子類獨有的屬性和方法。

1)多態(tài)的應(yīng)用

方法重載可以解決接收不同對象參數(shù)的問題,但其缺點也比較明顯。

  • 首先,隨著子類的增加,Master類需要繼續(xù)提供大量的方法重載,多次修改并重新編譯源文件。
  • 其次,每一個feed方法與某一種具體類型形成了密不可分的關(guān)系,耦合太高。

場景一:使用父類作為方法形參實現(xiàn)多態(tài),使方法參數(shù)的類型更為寬泛。

public class Animal {
//		父類中吃的方法會輸出“玩玩玩”
	public void play() {
		System.out.println("玩玩玩");
	}

//	父類中睡的方法會輸出“睡睡睡”
	public void sleep() {
		System.out.println("睡睡睡");
	}

}
/**
 * 狗類繼承 父類
 * 
 * 
 *
 */
public class Dog extends Animal {

//	狗類特有的方法“狗吃狗糧”
	public void eat() {
		System.out.println("狗吃狗糧");
	}

}
public class Test {

	public static void main(String[] args) {
		// 實例化寵物對象
		Animal d = new Dog();
		d.play();
		d.sleep();
//		The method eat() is undefined for the type Animal
//		對于類型動物,eat()方法未定義
//		當(dāng)我們?nèi)フ{(diào)用子類對象的特有方法時,就會爆出上面的錯誤提示
//		如果想要實現(xiàn)子類特有方法,就必須要強轉(zhuǎn)
//		d.eat();
		((Dog) d).eat();
	}

}

運行輸出:

在這里插入圖片描述

場景二:使用父類作為方法返回值實現(xiàn)多態(tài),使方法可以返回不同子類對象。

示例:

//動物類  父類
public class Animal {
	public void food() {
		System.out.println("...");
	}
}
//用extends關(guān)鍵字,繼承父類屬性
public class Dog extends Animal {

	public void food() {
		System.out.println("狗吃狗糧");
	}

	public void runing() {
		System.out.println("一直跑跑跳跳");
	}
}
//用extends關(guān)鍵字,繼承父類屬性
public class Fish extends Animal {
	public void food() {
		System.out.println("大魚吃小魚,小魚吃蝦米");
	}

	public void swimming() {
		System.out.println("小魚兒,一直游");
	}
}
public class Master {
//	傳入你的動物,并去給它喂食
	public void food(Animal animal) {
		System.out.println("喂食");
		animal.food();
	}
}
import java.util.Scanner;

public class Shopping {
//	你沒有動物,所以animal為空
	Animal animal = null;

//	判斷你要購買的寵物,并返回寵物類(狗、魚)
	public Animal shopping(int a) {
		if (a == 1) {
			animal = new Dog();
		} else if (a == 2) {
			animal = new Fish();
		}
//		this.animal=animal;
		return animal;
	}

	public void showMenu() {
		Scanner input = new Scanner(System.in);
		System.out.println("歡迎來到一只寵物寵物店");
		System.out.println("請選擇喜歡的寵物:");
		System.out.println("1.狗 2.魚 ");
		int a = input.nextInt();
		Animal animal = shopping(a);
		Master mm = new Master();
		mm.food(animal);
//		用instanceof判斷你買的是狗還是魚。
//		狗就執(zhí)行狗的屬性和方法,魚就執(zhí)行魚的屬性和方法
		if (animal instanceof Dog) {
			Dog d = (Dog) animal;
			d.runing();
		} else if (animal instanceof Fish) {
			Fish f = (Fish) animal;
			f.swimming();
		}

	}
}
//測試類
public class text {
	public static void main(String[] args) {
		Shopping shop = new Shopping();
		shop.showMenu();
	}
}

運行結(jié)果:

在這里插入圖片描述

2)多態(tài)的靜態(tài)和動態(tài)實現(xiàn)

動態(tài)綁定:即為重寫/覆蓋,方法的重寫

動態(tài)綁定也叫后期綁定,在運行時,虛擬機根據(jù)具體對象實例的類型進行綁定,或者說是只有對象在虛擬機中運行創(chuàng)建了之后,才能確定方法屬于哪一個對象實例的

  • 根據(jù)實際對象是什么,就去找相應(yīng)對象方法去執(zhí)行。
  • 動態(tài)綁定是在運行時才會執(zhí)行(例如重寫的方法)。

靜態(tài)綁定:即為重載,方法的重載

一個方法的參數(shù)在編譯階段常被靜態(tài)地綁定,它是根據(jù)參數(shù)列表的不同來區(qū)分不同的函數(shù),通過編輯之后會變成兩個不同的函數(shù)

  • 根據(jù)類型找相應(yīng)的屬性或者靜態(tài)變量。
  • 靜態(tài)綁定是在編譯時執(zhí)行(如成員變量,靜態(tài)方法)。

更多編程相關(guān)知識,請訪問:編程教學(xué)?。?/p>

以上是java有哪三大特性的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
VSCODE設(shè)置。JSON位置 VSCODE設(shè)置。JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位于用戶級或工作區(qū)級路徑,用于自定義VSCode設(shè)置。1.用戶級路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級路徑:項目根目錄下的.vscode/settings

Python Itertools組合示例 Python Itertools組合示例 Jul 31, 2025 am 09:53 AM

itertools.combinations用于生成從可迭代對象中選取指定數(shù)量元素的所有不重復(fù)組合(順序無關(guān)),其用法包括:1.從列表中選2個元素組合,如('A','B')、('A','C')等,避免重復(fù)順序;2.對字符串取3個字符組合,如"abc"、"abd",適用于子序列生成;3.求兩數(shù)之和等于目標(biāo)值的組合,如1 5=6,簡化雙重循環(huán)邏輯;組合與排列的區(qū)別在于順序是否重要,combinations視AB與BA為相同,而permutations視為不同;

如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務(wù),必須先關(guān)閉自動提交模式,再執(zhí)行多個操作,最后根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開始事務(wù);2.執(zhí)行多個SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時應(yīng)使用try-with-resources管理資源,妥善處理異常并關(guān)閉連接,避免連接泄漏;此外建議使用連接池、設(shè)置保存點實現(xiàn)部分回滾,并保持事務(wù)盡可能短以提升性能。

在Java的掌握依賴注入春季和Guice 在Java的掌握依賴注入春季和Guice Aug 01, 2025 am 05:53 AM

依賴性(di)IsadesignpatternwhereObjectsReceivedenciesenciesExtern上,推廣looseSecouplingAndEaseerTestingThroughConstructor,setter,orfieldInjection.2.springfraMefringframeWorkSannotationsLikeLikeLike@component@component,@component,@service,@autowiredwithjava-service和@autowiredwithjava-ligatiredwithjava-lase-lightike

Python Pytest夾具示例 Python Pytest夾具示例 Jul 31, 2025 am 09:35 AM

fixture是用于為測試提供預(yù)設(shè)環(huán)境或數(shù)據(jù)的函數(shù),1.使用@pytest.fixture裝飾器定義fixture;2.在測試函數(shù)中以參數(shù)形式注入fixture;3.yield之前執(zhí)行setup,之后執(zhí)行teardown;4.通過scope參數(shù)控制作用域,如function、module等;5.將共用fixture放在conftest.py中實現(xiàn)跨文件共享,從而提升測試的可維護性和復(fù)用性。

故障排除常見的java`ofmemoryError`場景'' 故障排除常見的java`ofmemoryError`場景'' Jul 31, 2025 am 09:07 AM

java.lang.OutOfMemoryError:Javaheapspace表示堆內(nèi)存不足,需檢查大對象處理、內(nèi)存泄漏及堆設(shè)置,通過堆轉(zhuǎn)儲分析工具定位并優(yōu)化代碼;2.Metaspace錯誤因類元數(shù)據(jù)過多,常見于動態(tài)類生成或熱部署,應(yīng)限制MaxMetaspaceSize并優(yōu)化類加載;3.Unabletocreatenewnativethread因系統(tǒng)線程資源耗盡,需檢查線程數(shù)限制、使用線程池、調(diào)整棧大小;4.GCoverheadlimitexceeded指GC頻繁但回收少,應(yīng)分析GC日志,優(yōu)化

如何使用Java的日歷? 如何使用Java的日歷? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當(dāng)前日期時間;3.使用of()方法創(chuàng)建特定日期時間;4.利用plus/minus方法不可變地增減時間;5.使用ZonedDateTime和ZoneId處理時區(qū);6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時通過Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應(yīng)優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

Java開發(fā)人員的高級春季數(shù)據(jù)JPA Java開發(fā)人員的高級春季數(shù)據(jù)JPA Jul 31, 2025 am 07:54 AM

掌握AdvancedSpringDataJPA的核心在于根據(jù)場景選擇合適的數(shù)據(jù)訪問方式,并確保性能與可維護性。1.自定義查詢中,@Query支持JPQL和原生SQL,適用于復(fù)雜關(guān)聯(lián)與聚合操作,返回結(jié)果建議通過DTO或接口投影(Projection)進行類型安全映射,避免使用Object[]帶來的維護難題。2.分頁操作需結(jié)合Pageable實現(xiàn),但要警惕N 1查詢問題,可通過JOINFETCH預(yù)加載關(guān)聯(lián)數(shù)據(jù)或使用投影減少實體加載,從而提升性能。3.對于多條件動態(tài)查詢,應(yīng)使用JpaSpecifica

See all articles