Java初級筆記No.3(更新中)

來源:互聯網
上載者:User
2018.7.26

1、Java中的繼承

Java中使用extends關鍵字來說明繼承關係。

class Animals {}class Dogs extends Animals {}

2、繼承的特性

java中繼承的特性與C++基本一致:
· 子類擁有父類中非private的屬性,方法;
· 子類可以擁有自己的屬性和方法;
· 子類可以用自己的方式實現父類的方法(即重寫);
· java中的繼承是單繼承,但是可以多重繼承,單一般不使用多重繼承,而採用介面的方式來實現多重繼承。??? 這也是與C++中繼承問題的不同。

3、繼承相關關鍵字

extends
Java中使用extends關鍵字來說明單繼承(一個子類只能擁有一個父類):

public class Animal {     private String name;       private int id;     public Animal(String myName, String myid) {         //初始化屬性值    }     public void eat() {  //吃東西方法的具體實現  }     public void sleep() { //睡覺方法的具體實現  } }  public class Penguin  extends  Animal{ }

implements
使用implements關鍵字可以變相的使java具有多繼承的特性,使用範圍為類繼承介面的情況,可以同時繼承多個介面(介面和介面之間採用逗號分隔):

public interface A {    public void eat();    public void sleep();} public interface B {    public void show();} public class C implements A,B {}

super 與 this
super關鍵字:用來實現對父類成員的訪問,用來引用當前對象的父類,這在C++中是不允許的。

this關鍵字:類似於C++中的this指標,只不過java中沒有指標的概念,這裡是引用。

class Animal {    void eat() {        System.out.println("animal:eat");    }}class Dog extends Animal {    void eat() {        System.out.println("dog:eat");    }    void eatTest() {        this.eat();        super.eat();    }}public class testFile {    public static void main(String[] args) {        Animal a = new Animal();        a.eat();                Dog d = new Dog();        d.eatTest();    }}

這裡父類中的方法沒有存取控制許可權標識,預設為default,說明了各個存取控制標識的存取範圍(default也是與C++的區別):

final

final關鍵字聲明類可以把類定義為不能被繼承的類,又叫做最終類

final關鍵字還可以用於單獨修飾方法,是的該方法不能被子類重寫:

final class Base {  }  public/private/default/protected final 傳回值 method() {  }  

另外,執行個體變數也可以被定義為final,被定義為final的變數不能被修改。被聲明為final類的方法自動被聲明為final,但執行個體變數並不是final

4、建構函式

這裡與C++中的建構函式基本一致,存在一個不同點是:

如果父類的建構函式中帶有參數,則必須在子類的建構函式中顯式的通過super關鍵字調用父類的建構函式,並配以適當的參數列表。

如果父類建構函式沒有參數,則在子類的建構函式中不需要使用super關鍵字調用父類的建構函式,系統會自動調用父類的無參數建構函式:

class SuperClass {    private int n;    SuperClass() {        System.out.println("SuperClass()");    }        SuperClass(int n) {        System.out.println("SuperClass(int n)");        this.n = n;    }}class SubClass extends SuperClass {    private int n;        SubClass() {        super(300);        System.out.println("SubClass()");    }        SubClass(int n) {        System.out.println("SubClass(int n) : " + n);        this.n = n;    }}public class TestSuperSub {    public static void main(String[] args) {        SubClass sc = new SubClass();   //SuperClass(int n), SubClass()        System.out.println();        SubClass sc2 = new SubClass(200);   //SuperClass(), SubClass(int n)    }}

5、Override與Overload

Override->重寫,Overload->重載,這裡從概念上將於C++沒什麼區別。

Override

當需要在子類中調用父類的被重寫的方法時,需要使用super關鍵字:

class Animal{       public void move(){          System.out.println("動物可以移動");       }    }     class Dog extends Animal{   public void move(){      super.move();  //調用Animal的move      System.out.println("狗可以跑和走");   }   public void bark(){      System.out.println("狗可以吠叫");   }}     public class testFile{   public static void main(String args[]){      Animal b = new Dog();      b.move();//執行Dog,但是由於其中調用了super,所以也會輸出Animal中的內容   }}

Overload

6、 Java中的多態

同C++相同,java中多態的存在需要三個必要條件:
· 繼承; · 重寫; ·父類引用指向子類對象呢。

7、抽象類別
如果一個類中沒有包含足夠的資訊來描繪一個具體的對象呢,這個類就是抽象類別 ,其與C++中抽象類別的概念一致,不能用於執行個體化對象,主要用於介面的指定。

C++中使用純虛函數來表示抽象類別,java中使用關鍵字abstract來聲明一個抽象類別:

public abstract class Base {  }

8、抽象方法
一個類中包含一些特別的成員方法,該方法的具體實現由其子類確定,則可以在父類中聲明該方法為抽象方法:

抽象方法只包含一個方法名,沒有方法體。

public abstract class Employee{   private String name;   private String address;   private int number;      public abstract double computePay();      //其餘代碼}  

聲明抽象方法會造成一下兩個結果:
· 如果一個類中包含抽象方法,則該類必須是抽象類別;
· 任何子類必須重寫父類的抽象方法,或者聲明自身為抽象類別。

9、Java中的封裝
這與C++中的封裝沒有什麼區別,主要以private體現。

10、Java中的介面

在Java中抽象方法的集合通常以interface來聲明,稱之為介面,這與golang中的介面一致。

[可見度] interface 介面名稱 [extends 其他的類名] {        // 聲明變數        // 抽象方法}

介面使用執行個體:

/*AnimalH.java*/package test2;interface AnimalH {    public void eat();    public void travel();}

類使用implements關鍵字實現介面。

package test2;public class MammalInt implements AnimalH {    public void eat() {        System.out.println("Mammal eats");    }        public void travel() {        System.out.println("Mammal travels");    }        public int noOfLegs() {        return 0;    }          public static void main(String[] args) {        MammalInt m = new MammalInt();        m.eat();        m.travel();    }}  

11、同時,介面與介面之間也可以由繼承關係,用extends關鍵字表示:

// 檔案名稱: Sports.javapublic interface Sports{   public void setHomeTeam(String name);   public void setVisitingTeam(String name);} // 檔案名稱: Football.javapublic interface Football extends Sports{   public void homeTeamScored(int points);   public void visitingTeamScored(int points);   public void endOfQuarter(int quarter);} // 檔案名稱: Hockey.javapublic interface Hockey extends Sports{   public void homeGoalScored();   public void visitingGoalScored();   public void endOfPeriod(int period);   public void overtimePeriod(int ot);}  

12、介面的多繼承
在java中,類的多繼承是不合法的,但介面允許多繼承 。
在介面的多繼承中,extands關鍵字只需要使用一次,在後面跟著繼承介面:

public interface Hockey extends Sports, Event  {}  

一個類可以實現多個介面,使用implements關鍵字,後面跟實現的介面:

public class People implements Sports, Event {}  

13、沒有任何方法的介面被稱為標記介面

其作用為:

13、Java中的,是C++中沒有的概念。包的存在是為了更好的組織類,用於區別類名的命名空間。

import
為了使用某個包中的成員,需要在java程式中明確匯入該包,使用import關鍵字來完成對包的匯入。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.