
java中的繼承關(guān)系是單繼承,如果有多個(gè)父類的時(shí)候,可以考慮使用接口進(jìn)行實(shí)現(xiàn)。接口常常被廣泛的使用。
public interface Usb { public void dataTransfer(); public void play();}
public class UPan implements Usb { @Override public void dataTransfer() { System.out.println("upan可以傳輸數(shù)據(jù)"); }}
public class Mouse implements Usb{ @Override public void dataTransfer() { System.out.println("鼠標(biāo)來(lái)點(diǎn)擊屏幕"); }}
public class Test { public static void main(String[] args) { Mouse mouse = new Mouse(); mouse.dataTransfer(); UPan up = new UPan(); up.dataTransfer(); }}
1.接口代表一種能力,接口中可以定義多個(gè)方法,子類在實(shí)現(xiàn)的時(shí)候,必須要實(shí)現(xiàn)這些方法,將這些方法實(shí)現(xiàn)就代表具備方法的能力。
2.關(guān)心實(shí)現(xiàn)類有何能力,而不關(guān)心實(shí)現(xiàn)細(xì)節(jié)
(資料圖片)
旺財(cái)是一只狗------is-a
旺財(cái)有一個(gè)鼻------has-a
聞氣味---能力3.接口是一種約定
4.規(guī)則
可以定義一個(gè)新接口,用extends去繼承一個(gè)已有的接口可以定義一個(gè)類,用implements去實(shí)現(xiàn)一個(gè)接口中所有方法。可以定義一個(gè)抽象類,用implements去實(shí)現(xiàn)一個(gè)接口中部分方法。內(nèi)部類(當(dāng)作類中的一個(gè)普通成員變量,只不過此成員變量是class的類型):
一個(gè)java文件中可以包含多個(gè)class,但是只能有一個(gè)public class,如果一個(gè)類定義在另一個(gè)類的內(nèi)部,此時(shí)可以稱之為內(nèi)部類
創(chuàng)建內(nèi)部類的時(shí)候,跟之前的方法不一樣,需要在內(nèi)部類的前面添加外部類來(lái)進(jìn)行修飾
??InnerClassDemo.InnerClass inner = new InnerClassDemo().new InnerClass();?
?
public class Outer { private String name = "zhangsan"; class Inner{ private String name = "lisi"; public void show(){ System.out.println(name); System.out.println(this.name); System.out.println(Outer.this.name); } } public static void main(String[] args) { Outer.Inner inner = new Outer().new Inner(); inner.show(); }}如果需要訪問外部類的屬性,那么需要添加 外部類類名.this.屬性。
public class InnerClassDemo { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void show(){ System.out.println("show");// System.out.println(age); InnerClass inner = new InnerClass(); System.out.println(inner.age);//創(chuàng)建了內(nèi)部類的對(duì)象,此時(shí)可以在外部類中訪問私有屬性 } class InnerClass{ private int age;// static String name = "zhangsan"; public void test(){ System.out.println("test"); System.out.println(id); System.out.println(name); } class InnerInner{ private int id; public void print(){ System.out.println("print"); } } } public static void main(String[] args) { InnerClass innerClass = new InnerClassDemo().new InnerClass(); }}
public class TestInnerClass { public static void main(String[] args) {// System.gc(); InnerClassDemo innerClassDemo = new InnerClassDemo(); innerClassDemo.show(); System.out.println(innerClassDemo.getName()); InnerClassDemo.InnerClass inner = new InnerClassDemo().new InnerClass(); inner.test();// System.out.println(inner.age); InnerClassDemo.InnerClass.InnerInner innerInner = new InnerClassDemo().new InnerClass().new InnerInner(); }}
public class NoNameInnerClassDemo { public static void main(String[] args) { System.out.println("有一萬(wàn)行代碼"); new Thread(new Runnable() { @Override public void run() { }//看似NEW了一個(gè)接口,實(shí)則是類里的實(shí)現(xiàn)方法 }); System.out.println("有一萬(wàn)行代碼"); }}class Runner implements Runnable{ @Override public void run() { }}靜態(tài)內(nèi)部類:在內(nèi)部類中可以定義靜態(tài)內(nèi)部類,使用static關(guān)鍵字進(jìn)行修飾,使用規(guī)則外部類.內(nèi)部類 類的引用名稱 = new 外部類.內(nèi)部類()
public class StaticClass { private int id; public void test(){ System.out.println("test"); } static class InnerClass{ private String name; public void show(){ System.out.println("show"); } } public static void main(String[] args) { InnerClass innerClass = new StaticClass.InnerClass();//靜態(tài)類通過類名調(diào)用,無(wú)()// InnerClass innerClass = new StaticClass().new InnerClass();//內(nèi)部類看作外部類的一個(gè)對(duì)象,有() }}方法內(nèi)部類:在外部類的方法中也可以定義類,此時(shí)叫做方法內(nèi)部類使用的時(shí)候需要注意,只能在方法中創(chuàng)建對(duì)象,因?yàn)榇薱lass的作用域就是當(dāng)前方法方法內(nèi)部類不能在外部類的方法以外的地方使用,所以方法內(nèi)部類丌能使用訪問控制符和static修飾符
public class MethodInnerClass { public void show(int number){ System.out.println("show"); class InnerClass{ private String name; public void test(int a){ System.out.println("test"); System.out.println(a); System.out.println(number); } } new InnerClass().test(888); } public static void main(String[] args) { MethodInnerClass methodInnerClass = new MethodInnerClass(); methodInnerClass.show(666); }}
標(biāo)簽: 方法內(nèi)部類 抽象方法 匿名內(nèi)部類