面向對象

  • 面向對象編程的本質:以類的方式組織代碼,以對象的組織封裝數據。
  • 三大特性:封裝,繼承,多態。
  • 構造器:
  1. 和類名相同
  2. 沒有返回值
  • 作用:
  1. new 本質在調用構造方法
  2. 初始化對象的值
  • 生成構造器快捷鍵:alt+insert

封裝

屬性私有private後要提供get,set方法。

封裝的意義:

  1. 提高程序安全性,保護數據
  2. 隱藏代碼實現細節
  3. 統一接口
  4. 增加系統可維護性

繼承

  1. 在Java中所有類默認繼承Object類
  2. Java中只有單繼承
  • 如果父類只有有參構造,那麼子類也只能調用有參構造,因為子類構造方法內第一句默認為super()

public 子類名(){

super();//這句是隱藏代碼

......

}

  • super和this不能同時調用構造方法

多態:同一個方法根據發送對象的不同而採取多種不同的方法

靜態方法(static)的調用只和左邊,定義的數據類型有關

靜態方法屬於類不屬於實例

//已知A為B的子類
A中的調用方法為public static void test(){System.out.println("A");}
B中的調用方法為public static void test(){System.out.println("B");}
A x=new A();
x.方法名();//調用的是A的方法,結果為A

B x=new A();
x.方法名();//調用的是B的方法,結果為B

非靜態方法的調用,子類會重寫父類,與子類方法有關

//已知A為B的子類
A中的調用方法為public void test(){System.out.println("A");}
B中的調用方法為public void test(){System.out.println("B");}
A x=new A();
x.方法名();//結果為A

B x=new A();
x.方法名();//結果為A

對象能執行哪些方法,主要看對象左邊的類型,和右邊關係不大

//person為student的父類
class person{
        public void A(){ 
            System.out.println("A") ; 
        } 
    }

class student {
    public void A(){
        System.out.println("AA") ;
    }
    public void B(){
        System.out.println("B") ;
    }
}
public class demo1 {
    public static void main(String[] args) {
        //student能調用的方法都是自己的或者繼承父類的
        student s1=new student();//可以調用A方法,B方法分別輸出AA,B
        
        //person父類型,可以指向子類,但是不能調用子類獨有的方法
        person s2=new student();//可以調用A方法,輸出AA,因為子類重寫了父類的方法,所以執行子類方法內容
        Object s3=new student();
  • instanceof:(類型轉換)引用類型。判斷一個對象是什麼類型。
//person為student的父類
Object object = new student();
 System.out.println(object instanceof student);true
 System.out.println(object instanceof person);true
 System.out.println(object instanceof Object);true
 System.out.println(object instanceof String);//False
  • 子類轉換父類,可能丟失自己的方法類型。
  • 低轉高類型為自動轉換(子類轉換為父類),否則為強制轉換(父類轉換為子類)

Static靜態

非靜態方法可以調用靜態方法

靜態方法不能調用非靜態方法

一個類中,調用方法的順序為:靜態代碼塊(只調用一次)---匿名代碼塊---構造方法

接口

接口不能被實例化,接口中沒有構造方法

內部類

一個Java文件中可以有多個class類,但是隻能有一個public class