A:爲何要有包java
舉例:面試
學生:增長,刪除,修改,查詢 老師:增長,刪除,修改,查詢 ... 方案1:按照功能分 com.heima.add AddStudent AddTeacher com.heima.delete DeleteStudent DeleteTeacher com.heima.update UpdateStudent UpdateTeacher com.heima.find FindStudent FindTeacher 方案2:按照模塊分 com.heima.teacher AddTeacher DeleteTeacher UpdateTeacher FindTeacher com.heima.student AddStudent DeleteStudent UpdateStudent FindStudent
A:定義包的格式編程
B:定義包的注意事項ide
C:案例演示測試
A:如何編譯運行帶包的類this
a:javac編譯的時候帶上-d便可idea
b:經過java命令執行。code
A:案例演示對象
// 文件一 package net.allidea; public class JavaObject { public static void main(String[] args) { com.baidu.Person p = new com.baidu.Person("張三",23); System.out.println(p.getName() + "..." + p.getAge()); } } //文件二 package com.baidu; public class Person { private String name; private int age; public Person(){} public Person(String name,int age) { this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } }
A:案例演示繼承
爲何要有import
B:導包格式
C:package,import,class有沒有順序關係(面試題)
package net.allidea; import com.baidu.Person; //import java.util.Scanner; //在開發中咱們用的都是導入具體的類 import java.util.*; //*表明通配符,他會到該包下挨個匹配,匹配上九導入 public class JavaObject { public static void main(String[] args) { Person p = new Person("張三",23); System.out.println(p.getName() + "..." + p.getAge()); //java.util.Scanner sc = new java.util.Scanner(System.in); Scanner sc = new Scanner(System.in); int x = sc.nextInt(); System.out.println(x); } }
A:案例演示
本類 | 同一個包下(子類和無關類) | 不一樣包下(子類) | 不一樣包下(無關類) | |
---|---|---|---|---|
private | Y | |||
默認 | Y | Y | ||
protected | Y | Y | Y | |
public | Y | Y | Y | Y |
A:修飾符:
B:類:
C:成員變量:
D:構造方法:
E:成員方法:
F:除此之外的組合規則:
成員方法:
B:內部類訪問特色
C:案例演示
class JavaObject { public static void main(String [] args) { Outer.Inner oi = new Outer().new Inner(); oi.method(); } } class Outer { private int num = 10; class Inner { public void method() { System.out.println(num); } } }
class JavaObject { public static void main(String [] args) { //Outer.Inner oi = new Outer().new Inner(); //oi.method(); Outer o = new Outer(); o.print(); } } class Outer { private int num = 10; private class Inner { public void method() { System.out.println(num); } } public void print() { Inner i = new Inner(); i.method(); } }
B:成員內部類被靜態修飾後的訪問方式是:
class JavaObject { public static void main(String [] args) { //外部類名.內部類名 對象名 = 外部類名.內部類對象;Outer.new Inner(); Outer.Inner oi = new Outer.Inner(); oi.method(); Outer.Inner2.print(); } } class Outer { static class Inner { public void method() { System.out.println("method"); } } static class Inner2{ public static void print() { System.out.println("print"); } } }
要求:使用已知的變量,在控制檯輸出30,20,10。
//內部類之因此能獲取外部類的成員,是由於它能獲取到外部類的引用外部類名.this
class JavaObject { public static void main(String [] args) { Outer.Inner oi = new Outer().new Inner(); oi.show(); } } class Outer { public int num = 10; class Inner { public int num = 20; public void show() { int num = 30; System.out.println(num); System.out.println(this.num); System.out.println(Outer.this.num); } } }
A:案例演示
可是jdk1.8取消了這個事情,因此我認爲這是個bug,雖然取消,若是在書寫代碼時候,沒有手動添加,系統底層也會默給你final
class JavaObject { public static void main(String [] args) { Outer o = new Outer(); o.method(); } } //開發中不多用 class Outer { public void method() { final int num = 10; class Inner { public void print() { System.out.println(num); } } Inner i = new Inner(); i.print(); } /*public void run() { Inner i = new Inner();//局部內部類,只能在其方法內有效 i.print(); }*/ }
A:匿名內部類
B:前提:存在一個類或者接口
new 類名或者接口名(){ 重寫方法; }
D:本質是什麼呢?
E:案例演示
class JavaObject { public static void main(String [] args) { Outer o = new Outer(); o.method(); } } interface Inter { public void print(); } class Outer { class Inner implements Inter { public void print() { System.out.println("print"); } } public void method() { //Inner i = new Inner(); //i.print(); //new Inner().print(); new Inter() { //實現Inter接口new Inter() {} public void print() { //重寫抽象方法 System.out.println("print"); } }.print(); } }
A:案例演示
class JavaObject { public static void main(String [] args) { Outer o = new Outer(); o.method(); } } interface Inter { public void show1(); public void show2(); } //匿名內部類只針對重寫一個方法的時候使用 class Outer { public void method() { /*new Inter() { public void show1() { System.out.println("show1"); } public void show2() { System.out.println("show2"); } }.show1(); new Inter() { public void show1() { System.out.println("show1"); } public void show2() { System.out.println("show2"); } }.show2();*/ Inter i = new Inter() { public void show1() { System.out.println("show1"); } public void show2() { System.out.println("show2"); } /*public void show3() { System.out.println("show3"); }*/ }; i.show1(); i.show2(); //i.show3(); //匿名內部類是不能向下轉型的,,由於沒有子類類名 } }
//這裏寫抽象類,接口都行 abstract class Person { public abstract void show(); } class PersonDemo { public void method(Person p) { p.show(); } } class PersonTest { public static void main(String[] args) { //如何調用PersonDemo中的method方法呢? PersonDemo pd = new PersonDemo (); } }
class JavaObject { public static void main(String [] args) { //如何調用PersonDemo中的method方法呢? PersonDemo pd = new PersonDemo (); //pd.method(new Student()); pd.method(new Person() { //匿名內部類看成參數傳遞(本質把匿名內部類看做一個對象) public void show() { System.out.println("show"); } }); } } abstract class Person { //抽象類 public abstract void show(); } class PersonDemo { //public void method(Person p) { //new Person(); //Person p = new Student(); /* Person p = new Person() { //父類引用指向子類對象 public void show() { System.out.println("show"); } } */ public void method(Person p) { p.show(); } } class Student extends Person { public void show() { System.out.print("show"); } }
補齊代碼,要求在控制檯輸出」HelloWorld」
interface Inter { void show(); }
class Outer { //補齊代碼 }
class OuterDemo {
public static void main(String[] args) { Outer.method().show(); }
}
class JavaObject { public static void main(String [] args) { //Outer.method().show(); //鏈式編程,每次調用方法後還能繼續調用方法,證實調用方法返回的是對象 Inter i = Outer.method(); i.show(); } } interface Inter { void show(); } class Outer { //補齊代碼 public static Inter method() { return new Inter() { public void show() { System.out.println("HelloWorld"); } }; } }