變量類型 變量名 = 值 Student mo = new Student()
使用new關鍵字建立對象時,會對建立好的對象進行默認初始化,分配內存空間,以及對類中構造器的調用java
類的構造器:又稱構造方法,在建立對象時必需要調用的編程
快捷鍵:Alt+Ins安全
特色:ide
做用:oop
劃分:this
無參構造設計
public class Creation { String name; public Creation(){ this.name = "mo"; } public static void main(String[] args) { Creation creation = new Creation(); System.out.println(creation.name); //mo } }
有參構造code
public class Creation { String name; public Creation(){} //無參構造【加上無參構造,new時既可帶參數,也可不帶參數】 public Creation(String na){ //有參構造 this.name = na; } public static void main(String[] args) { Creation creation = new Creation("mo"); System.out.println(creation.name); //mo } }
public class Packaging { private String name; private int age; public String getName(){ //get得到這個數據 return this.name; } public void setName(String name){ //set設置這個數據 this.name = name; } public int getAge(){ return this.age; } public void setAge(int age){ if (age>=0 && age<=120){ this.age = age; }else { this.age = 3; } } public static void main(String[] args) { Packaging packaging = new Packaging(); packaging.setName("mo"); System.out.println(packaging.getName()); //mo packaging.setAge(6); System.out.println(packaging.getAge()); //6 } }
繼承是類與類之間的關係,一個爲子類(派生類)、父類(基類)對象
快捷鍵:Ctrl+H繼承
Object類
super
public class Blank{ public static void main(String args[]){ Student student = new Student(); //同時調用了子類無參構造和父類無參構造 student.eat(); } } class Person{ public Person(){ System.out.println("person的無參構造在調用"); } public void eat(){ System.out.println("person正在吃·····"); } } class Student extends Person{ public Student(){ //隱藏代碼,調用子類構造器時會默認調用父類的無參構造 super(); //若是顯示父類的無參構造,要放在子類無參構造的第一行 //person的無參構造在調用 System.out.println("student的無參構造在調用"); //student的無參構造在調用 } public void eat(){ super.eat(); //"person正在吃·····" System.out.println("Student正在吃·····"); //"Student正在吃·····" } }
方法重寫【override】
多態:同一方法能夠根據發送對象的不一樣而採用多種不一樣的行爲方式
存在條件
public class Polymorphic { public static void main(String[] args) { student s1 = new student(); Person s2 = new student(); Object s3 = new student(); s1.eat(); //st_eat s2.eat(); //st_eat 子類重寫父類的方法,執行子類的方法 ((student) s2).run(); //st_run 父類不能調用子類獨有的方法,但能夠將父類強制轉爲子類(高轉低),執行子類的方法 } } class Person{ public void eat(){ System.out.println("Pe_eat"); } } class student extends Person{ public void eat(){ System.out.println("st_eat"); } public void run(){ System.out.println("st_run"); } }
A instanceof B -> 用於判斷A是不是B的實例
類型轉換【父(高) -> 子(低):強制轉換】【子 -> 父:自動轉換,但可能丟失子類中獨有的方法】
//Person是Student的父類 Person obj = new Student(); Student student = (Student)obj //強制轉換,並賦值 student.eat() //轉換後就可使用子類的方法
修飾符 abstract,修飾方法則爲抽象方法,修飾類則爲抽象類
抽象的抽象:約束
public class Abstract { public static void main(String[] args) { //new up1() //報錯:'up1' is abstract; cannot be instantiated } } abstract class up1{ public abstract void doSomething(); //抽象方法,只有方法名字,沒有方法的實現 } class up2 extends up1{ //子類繼承抽象類,要對抽象方法進行重寫 @Override public void doSomething() { } }
接口本質是契約、規範,本身沒法寫方法
聲明類的關鍵字是class,聲明接口的關鍵字是interface
類經過implements繼承接口,進行實現
內部類:在一個類的內部再定義一個類
【A類中定義B類,B就爲A的內部類,A爲B的外部類】