非洲瓜哇JAVA布的特点_java语言的基本特性以及编程细节
前言
java語言的學習是一個體系,所以如果想要對java的編程有一個很精通的一個掌握,它離不開很多基礎的知識點,比如JVM的原理、java多線程并發編程、數據結構等等。所以我這里對我學習的java的課程進行定期的總結,來記錄我學習java的一些想法和心得。也希望能通過我的這些分享,給需要的學習某方面知識的人一些幫助。
java基礎的回顧總結
java語言最明顯的幾個特點就是:封裝、繼承和多態,下面來具體聊一聊這三個特性。
封裝
封裝,它是一中信息隱藏技術。面向對象計算始于這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的接口訪問其他對象。在java中通過關鍵字private,protected和public實現封裝。所以說,封裝把對象的所有組成部分組合在一起,封裝定義程序如何引用對象的數據,封裝實際上使用方法將類的數據隱藏起來,控制用戶對類的修改和訪問數據的程度。 適當的封裝可以讓程式碼更容易理解和維護,也加強了程式碼的安全性。
繼承
繼承是從已有的類中派生出新的類,新的類能吸收已有類的數據屬性和行為,并能擴展新的能力。 新類的定義可以增加新的數據或新的功能,也可以用父類的功能,但不能選擇性地繼承父類,就是說子類會繼承父類的所有成員屬性和方法。繼承只能單一繼承,一個類只能繼承一個父類,而不能有多個繼承類,多繼承的方式只能通過接口來實現。
在我們日常編程中,合理的使用繼承特性,能夠消除代碼的復制,從而達到簡化代碼以及程序邏輯的作用。
這里我們來說一下繼承的特性。
繼承關系是傳遞的。若類C繼承類B,類B繼承類A(多層繼承),則類C既有從類B那里繼承下來的屬性與方法,也有從類A那里繼承下來的屬性與方法,還可以有自己新定義的屬性和方法。繼承來的屬性和方法盡管是隱式的,但仍是類C的屬性和方法。繼承是在一些比較一般的類的基礎上構造、建立和擴充新類的最有效的手段。
繼承簡化了人們對事物的認識和描述,能清晰體現相關類間的層次結構關系。
繼承提供了軟件復用功能。若類B繼承類A,那么建立類B時只需要再描述與基類(類A)不同的少量特征(數據成員和成員方法)即可。這種做法能減小代碼和數據的冗余度,大大增加程序的重用性。
繼承通過增強一致性來減少模塊間的接口和界面,大大增加了程序的易維護性。
下面我們來通過一段代碼來說明子類和父類的繼承關系。
package com.young.basic;
public class ExtendsDemo {
//main
public static void main(String aa[]) {
//new 一個對象B()
new B();
new C();
}
}
//建一個A類
class A {
//成員變量 其中num是實參
int num = 0;
private String name = "default name";
public A(){
System.out.println("父類無參數構造方法");
}
//成員方法,其中 i 是形參
public A(int i) {
//輸入int型文件輸出下面
System.out.println("aaaaaaaaaaaaaaaaaaa");
System.out.println("i= " + i);
//把輸入的i賦值給成員變量num
num = i;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//B繼承A
class B extends A {
int num = 0;
//成員方法B.
public B() {
//繼承類A的方法.因為B繼承了A必然繼承了A的特性.所以輸入int值10令方法實現.
super(10);
System.out.println("bbbbbbbbbbbbbbbbbbbb");
//這里的num是類B的.
System.out.println("num= " + num);
//如果想顯示類A的num則需要用下列的super.num.這里注意num在類A中需是成員變量才可以.
System.out.println("super.num= " + super.num);
//子類繼承的私有name只能通過繼承的公有方法來訪問和修改;如果沒有提供公共方法,則不能訪問和修改
System.out.println("子類的name = " + this.getName());
}
@Override
public void setName(String name) {
super.setName(name);
System.out.println("這是子類B的重寫的");
}
}
class C extends A{
public C(){
System.out.println("子類C無參數構造函數");
System.out.println("cccccccccccccccc");
}
}
運行結果:
aaaaaaaaaaaaaaaaaaa
i= 10
bbbbbbbbbbbbbbbbbbbb
num= 0
super.num= 10
子類的name = default name
父類無參數構造方法
子類C無參數構造函數
cccccccccccccccc
從上邊例子中我們能看出,
子類是不繼承父類的構造器(構造方法或者構造函數)的,它只是調用(隱式或顯式)。如果父類的構造器帶有參數(但沒有無參數構造方法),則必須在子類的構造器中顯式地通過super關鍵字調用父類的構造器并配以適當的參數列表,因為子類的構造方法是必須調用父類的構造方法的,默認的調用無參數構造方法,如果沒有無參構造方法,就必須調用有參數的父類構造方法了。但如果父類有無參構造方法,那么子類默認會調用無參的構造方法。如果父類的構造器有沒有參數的,則在子類的構造器中不需要使用super關鍵字調用父類構造器,系統會自動調用父類的無參構造器。
如果父類中的成員變量是私有的(private),子類是不能訪問的和修改的,除非父類提供了公共方法來進行訪問和修改。
子類可以重寫(override)父類的方法,從而使子類具有自己獨特的功能。這其實是我們后邊講的多態的一種體現。
多態
在面向對象語言中,接口的多種不同的實現方式即為多態。那么在Java語言中,多態,意味著一個對象有著多重特征,可以在特定的情況下,表現不同的狀態,從而對應著不同的屬性和方法。多態的這種思想使Java語言更加的靈活,很多設計模式和spring框架中都使用到了多態技術。
具體的表現在這些方面:
父類定義子類來構建
接口定義實現類來構建
抽象類定義實體類來構建
類方法的重載(overload)和重寫(override)
我們還是通過一段代碼來了解:
public class PolymorphismDemo {
public static void main(String[] args) {
IParent p1 = new Child_A();
IParent p2 = new Child_B();
doSimpleCall(p1);
doSimpleCall(p2);
Child_A child_a = new Child_A();
Child_B child_b = new Child_B();
//child_a 沒有重寫父類的eat方法,所以執行的是父類的eat方法
child_a.eat();
//child_b重寫了父類的eat方法,所以執行自己的eat方法
child_b.eat();
//child_b對eat方法進行了重載,增加了一個輸入參數
child_b.eat("popcorn");
}
//這里我們并不知道具體傳給我們的是哪個實現Parent的類,但是他們都有一個共同的接口方法
public static void doSimpleCall(IParent p){
p.simpleCall();
}
}
interface IParent//父類接口
{
public void simpleCall();
}
//父類
class Parent{
public void eat(){
System.out.println("parent is eating");
}
}
class Child_A extends Parent implements IParent
{
public void simpleCall()
{
System.out.println("I am Child_A");
//具體的實現細節;
}
}
class Child_B extends Parent implements IParent
{
public void simpleCall()
{
System.out.println("I am Child_B");
//具體的實現細節;
}
@Override
public void eat() {
System.out.println("Child_B is eating");
}
//這里通過增加一個String類型的參數對eat方法進行方法的重載
public void eat(String food){
System.out.println("Child_b is eating" + food);
}
}
代碼運行結果:
I am Child_A
I am Child_B
parent is eating
Child_B is eating
Child_b is eating popcorn
在上邊代碼中,將子類的對象賦值給父類的變量的方式就叫做向上造型,但是反過來父類的對象不能賦值給子類。向上造型和類型轉換不一樣,類型轉換一般是針對基本類型來說的。
編程細節
在編寫Java程序時如果能注意一些編程細節,會對整個項目的開發帶來積極的作用,是你編寫的程序更容易的被讀懂和維護。在這里推薦在java的開發工具中安裝一個阿里巴巴開發規約插件p3c,有時間的也可以去閱讀《阿里巴巴Java開發手冊》和《effective java》。
---------------2020年07月08日 未完待續--------------------------------------
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的非洲瓜哇JAVA布的特点_java语言的基本特性以及编程细节的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 以什么开头_判断字符串以什么开
- 下一篇: 外循环java作用_循环和外循环的区别和