面向物件的基本特徵
面向物件的基本特徵
-
封裝
-
多型
-
繼承
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)安全,可以控制可見範圍
- 封裝的實現
通過許可權修飾符
許可權修飾符可以修飾什麼?
類(類、介面等)、屬性、方法、構造器、內部類
類(外部類):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關鍵字
- 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);
}
}