1. 程式人生 > 實用技巧 >面向物件的基本特徵

面向物件的基本特徵

面向物件的基本特徵

  1. 封裝

  2. 多型

  3. 繼承

1.封裝

class Person{
      String name;
      public int age;
}
public static void main(String[] args){
      Person p = new Person();
      // 外部操作可以直接對成員進行直接操作
      p.name = '小灰灰';
      p.age = 10;
      // 有可能出現非法值 
      p.age = -20;
}

1、好處:

(1)隱藏實現細節,方便使用者使用

(2)安全,可以控制可見範圍

  1. 封裝的實現
    通過許可權修飾符

許可權修飾符可以修飾什麼?
類(類、介面等)、屬性、方法、構造器、內部類

類(外部類):public和預設

屬性:4種

方法:4種

構造器:4種

內部類:4種

3、通常屬性的封裝是什麼樣的?

當然屬性的許可權修飾符可以是private、預設、protected、public。但是我們大多數時候,見到的都是private,然後給它們配上get/set方法。

class Student{
    private String name;
    private  int age;
    private  boolean marry;

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setMarry(boolean marry) {
        this.marry = marry;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public boolean isMarry() {
        return marry;
    }
}

public class Test{
    public static void main(String[] args) {
            Student s1 = new Student();
            s1.setAge(10);
            s1.setName("小灰灰");
            s1.setMarry(false);
            System.out.println(s1.getAge());
            System.out.println(s1.getName());
            System.out.println(s1.isMarry());
    }

}

2.構造器

(1)作用 用於物件例項化的時候,實現物件初始化; 和new物件一起使用

//呼叫無參構造建立物件
類名 物件名 = new 類名();

//呼叫有參構造建立物件
類名 物件名 = new 類名(實參列表);

(2)可以在建立物件的同時為屬性賦值

public class Circle{
    private double radius;
    
    public Circle(){
        
    }
    public Circle(double r){
        radius = r;//為radius賦值
    }
}

構造器的特點:

(1)所有的類都有構造器

(2)如果一個類沒有顯式/明確的宣告一個構造器,那麼編譯器將會自動新增一個預設的無參構造

(3)如果一個類顯式/明確的聲明瞭構造器,那麼編譯器將不再自動新增預設的無參構造,如果需要,那麼就需要手動新增

(4)構造器的名稱必須與類名相同

(5)構造器沒有返回值型別

(6)構造器可以過載

public class Circle{
    private double radius;
    
    public Circle(){
        
    }
    public Circle(double r){
        radius = r;//為radius賦值
    }
}

3.this關鍵字

  1. this關鍵字
    (1) 出現在構造器中: 代表正在構建的物件
    (2) 出現在成員方法中: 表示正在呼叫這個方法的物件

2.this 用法
(1) this.屬性
當局部變數和成員變數同名時候,可以用this區分

(2) this.方法
表示當前物件呼叫方法,一般可以省略

(3) this() 或者 this(引數列表)
代表呼叫構造器

例子:

public class Student{
    private String name;
    private int score;
    
    public Student(){
        
    }
    public Student(String name){
        this.name = name;
    }
    public Student(String name, int score){
        this(name);
    }
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }
    public void setScore(int score){
        this.score = score;
    }
    public int getScore(){
        return score;
    }
}

4.包

4.1 包的作用:

4.1.1.可以避免類重名

有了包之後,類的全名稱就變為:包.類名

4.1.2.分類管理眾多包

例如:java.lang包,java.util包,java.io包.....

4.1.3.可以控制某些型別或成員的可見範圍

如果某個型別或者成員的許可權修飾預設的話,那麼就僅限於本包使用

4.2 包的宣告

package 包名;

注意:

(1)必須在原始檔的程式碼首行

(2)一個原始檔只能有一個

4.2.1 包的命名規範和習慣:

(1)所有單詞都小寫,每一個單詞之間使用.分割

(2)習慣用公司的域名倒置

4.2.2 使用其他包語法
(1) 全名稱引用

例如:java.util.Scanner input = new java.util.Scanner(System.in);

(2) import語句

import 包.類名;
import 包.*;

注意:當使用兩個不同包的同名類時,例如:java.util.Date和java.sql.Date。

一個使用全名稱,一個使用簡名稱

package 路徑1.路徑2.Test;

import java.util.Scanner;

public class Test{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
    }
}