目錄
4)過濾有效資料" >4)過濾有效資料
#5)總結" >#5)總結
#1)程式中的繼承" >#1)程式中的繼承
2)父類別的選擇" >2)父類別的選擇
3)繼承" >3)繼承
4)繼承的特點" >4)繼承的特點
5)不可繼承" >5)不可繼承
#1)方法的重寫/覆寫" >#1)方法的重寫/覆寫
2)方法重写与方法重载的区别" >2)方法重写与方法重载的区别
1)super关键字" >1)super关键字
2)super调用父类无参构造" >2)super调用父类无参构造
3)super调用父类有参构造" >3)super调用父类有参构造
4)this与super" >4)this与super
1)多态的应用" >1)多态的应用
首頁 Java Java基礎 java有哪三大特性

java有哪三大特性

Jan 06, 2023 pm 02:30 PM
java

java的三大特性是:1、封裝,就是將類別的某些資訊隱藏在類別內部,不允許外部程式直接訪問,而是透過該類別提供的方法來實現對隱藏資訊的操作和存取。 2.繼承,就是子類別擁有父類別的所有屬性和方法,從而實現了實作程式碼的複用。 3.多態,就是父類引用指向子類對象,產生多種型態。

java有哪三大特性

本教學操作環境:windows7系統、java8版、DELL G3電腦。

Java的三大特性

物件導向三大特性:封裝、繼承、多型。

封裝:

  • 將類別的某些資訊隱藏在類別內部,不允許外部程式直接訪問,而是透過該類別提供的方法來實現對隱藏資訊的操作和訪問。

繼承:

  • 子類別擁有父類別的所有屬性和方法(除了private修飾的屬性不能擁有),從而實現了實現代碼的複用;

多態:

  • 使用父類別引用接受,不同的子類別的物件實例,父類別參考呼叫相同的方法,根據子類別不同的實例,產生不同的結果

1、封裝

1)什麼是封裝

概念:盡可能隱藏物件的內部實作細節,控制物件的修改及存取的權限。

存取修飾符:private (可將屬性修飾為私有,僅本類別可見)

#2)公共存取方法

以存取方法的形式,進而完成賦值與取值運算。

問題:依舊沒有解決到非法資料輸入!

  • 提供公共存取方法,以確保資料的正常輸入。
  • 命名規格:
  • 賦值:setXXX() //使用方法參數實作賦值
  • 取值:getXXX() //使用方法回傳值實作取值

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;

//	在调用get方法时,返回本类a的值
	public int getNum() {
		return a;
	}

//	接受传入的值100,并赋值给本类的a
	public void setNum(int num) {
		this.a = num;
	}
登入後複製

4)過濾有效資料

在公共的存取方法內部,加入邏輯判斷,進而過濾掉非法數據,以確保資料安全。

#5)總結

get/set方法是外部存取物件私有屬性的唯一通道,方法內部可偵測資料並篩選資料。

2、繼承

#1)程式中的繼承

  • 程式中的繼承,是類別與類別之間特徵和行為的一種贈與或獲得。
  • 兩個類別之間的繼承關係,必須滿足「is a」的關係。

2)父類別的選擇

  • #現實生活中,許多類別之間都存在著繼承關係,都滿足「is a」的關係。

  • 狗是一種動物、狗是一種生物、狗是一種物質。

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

  • 功能越精細,重合點越多,越接近直接父類別。

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

3)繼承

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

public class 子类名 extends 父类名{
	
	//代码块
	}
登入後複製

應用程式:產生繼承關係之後,子類別可以使用父類別中的屬性和方法,也可定義子類別獨有的屬性和方法。

好處:既提高程式碼的複用性,又提高程式碼的可擴充性。

4)繼承的特點

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

5)不可繼承

建構方法:類別中的建構方法,只負責建立本類對象,不可繼承。

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

父子類別不在同一個package中時,default修飾的屬性與方法:存取修飾符的一種,僅同套件可見。

3、方法重寫

#1)方法的重寫/覆寫

方法重寫原則:

  • 方法名稱、參數清單與父類別相同。
  • 傳回值類型必須與父類別相同或其子類別
  • 存取修飾符可與父類別相同或是比父類別更寬泛。

方法重寫的執行:

  • 子類別重寫父類別方法後,呼叫時優先執行子類別重寫後的方法。

  • 方法重寫的特性:

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

    子類別重寫父類別方法,存取層級不能嚴於父類別方法。

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

    父类的构造方法无法重写,只能被覆盖。

示例:

//父类
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();
	}

}
登入後複製

运行输出:

java有哪三大特性

2)方法重写与方法重载的区别

相同点:方法名相同
不同点:
重载:参数列表不同,返回值与访问修饰符无关
重写:参数列表相同,返回值相同或其子类,访问修饰符不能比父类更严

4、super关键字

1)super关键字

super关键字可在子类中访问父类的方法。

  • 使用”super.”的形式访问父类的方法,进而完成在子类中的复用;
  • 再叠加额外的功能代码,组成新的功能。

2)super调用父类无参构造

super():表示调用父类无参构造方法。如果没有显示书写,隐式存在于子类构造方法的首行。

3)super调用父类有参构造

super():表示调用父类无参构造方法。

super(实参):表示调用父类有参构造方法。
参构造被执行

4)this与super

this或super使用在构造方法中时,都要求在首行。
当子类构造中使用了this()或this(实参),即不可再同时书写super()或super(实参),会由this()指向构造方法完成super()调用。

class A{
		public A(){
		System.out.println(( "A-无参构造"));
		}
		public A(int value) {
		System.out.println(("A-有参构造")); 
		}
		}
		class B extends A{
		public B(){
		super();
		System.out.println( "B-无参构造");
		}
		public B(int value) {
//		super();这两货不能跟同时存在
		this();
		System.out.println(("B-有参构造"));
		}
		}
登入後複製

5、多态

概念:父类引用指向子类对象,从而产生多种形态。

二者具有直接或间接的继承关系时,父类引用可指向子类对象,即形成多态。

父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法。

1)多态的应用

方法重载可以解决接收不同对象参数的问题,但其缺点也比较明显。

  • 首先,随着子类的增加,Master类需要继续提供大量的方法重载,多次修改并重新编译源文件。
  • 其次,每一个feed方法与某一种具体类型形成了密不可分的关系,耦合太高。

场景一:使用父类作为方法形参实现多态,使方法参数的类型更为宽泛。

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.eat();
		((Dog) d).eat();
	}

}
登入後複製

运行输出:

java有哪三大特性

场景二:使用父类作为方法返回值实现多态,使方法可以返回不同子类对象。

示例:

//动物类  父类
public class Animal {
	public void food() {
		System.out.println("...");
	}
}
登入後複製
//用extends关键字,继承父类属性
public class Dog extends Animal {

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

	public void runing() {
		System.out.println("一直跑跑跳跳");
	}
}
登入後複製
//用extends关键字,继承父类属性
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判断你买的是狗还是鱼。
//		狗就执行狗的属性和方法,鱼就执行鱼的属性和方法
		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();
	}
}
登入後複製

运行结果:

java有哪三大特性

2)多态的静态和动态实现

动态绑定:即为重写/覆盖,方法的重写

动态绑定也叫后期绑定,在运行时,虚拟机根据具体对象实例的类型进行绑定,或者说是只有对象在虚拟机中运行创建了之后,才能确定方法属于哪一个对象实例的

  • 根据实际对象是什么,就去找相应对象方法去执行。
  • 动态绑定是在运行时才会执行(例如重写的方法)。

静态绑定:即为重载,方法的重载

一个方法的参数在编译阶段常被静态地绑定,它是根据参数列表的不同来区分不同的函数,通过编辑之后会变成两个不同的函数

  • 根据类型找相应的属性或者静态变量。
  • 静态绑定是在编译时执行(如成员变量,静态方法)。

更多编程相关知识,请访问:编程教学!!

以上是java有哪三大特性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java 中的完美數 Java 中的完美數 Aug 30, 2024 pm 04:28 PM

Java 完美數指南。這裡我們討論定義,如何在 Java 中檢查完美數?

Java 中的隨機數產生器 Java 中的隨機數產生器 Aug 30, 2024 pm 04:27 PM

Java 隨機數產生器指南。在這裡,我們透過範例討論 Java 中的函數,並透過範例討論兩個不同的生成器。

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java 版 Weka 指南。這裡我們透過範例討論簡介、如何使用 weka java、平台類型和優點。

Java 中的史密斯數 Java 中的史密斯數 Aug 30, 2024 pm 04:28 PM

Java 史密斯數指南。這裡我們討論定義,如何在Java中檢查史密斯號?帶有程式碼實現的範例。

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

在本文中,我們保留了最常被問到的 Java Spring 面試問題及其詳細答案。這樣你就可以順利通過面試。

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

Java 中的時間戳至今 Java 中的時間戳至今 Aug 30, 2024 pm 04:28 PM

Java 中的時間戳記到日期指南。這裡我們也結合範例討論了介紹以及如何在java中將時間戳記轉換為日期。

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

See all articles