1. 接口java
接口为咱们提供了一种将接口与实现分离的更加结构化的方法。接口是一个彻底的抽象类,它没有提供任何形式的具体实现,它容许建立者肯定方法名,参数类表,返回类型没有任何方法体的方法。ide
接口被用来创建类与类之间的协议。接口类修饰符必须是public,default(默认的,本包内有访问权限)或者前边两个和abstract组合,接口也能够包含域,可是这些域隐士地是public static final类型的,全部接口域必须初始化值。接口中方法默认访问级别都是public,若是定义访问级别小于public,编译将不能经过。函数
接口是用来实现类间多重继承功能的结构.
接口不能实例化,即不能用new运算符建立对象。
一个类经过使用关键字implements声明本身实现一个或多个接口。
在类体中可使用接口中定义的常量,并且必须实现接口中定义的全部方法
接口中的方法是自动公有的,在实现接口时必须把方法声明为public 。接口中的方法都是抽象的。this
一个接口能够继承另外一个接口。spa
任何类(包括普通类,内部类,抽象类)能够实现一个接口。code
2. 抽象类对象
抽象类也叫作抽象基类,抽象类是基础类和接口中间的一个中庸之道,即有基础类特性(已实现的方法体),又有接口特性(抽象方法),抽象类用abstract修饰,抽象类中能够有抽象方法也用abstract来修饰。blog
抽象方法:java 中能够定义一些不含方法体的方法,它的方法体的实现交给该类的子类根据本身的状况去实现。
抽象类:包含抽象方法的类叫抽象类。一个抽象类能够有一个或多个抽象方法。继承
抽象类必须使用abstract修饰符来定义,抽象方法也必须用abstract来修饰。
抽象类不能被实例化,不能用new关键字去产生对象。
抽象方法只能声明,不能实现。
含有抽象方法的类必须被声明为抽象类,抽象类的子类必须覆盖全部的抽象方法后才能被实例化,不然这个子类仍是个抽象类。接口
3. 内部类
能够将一个类的定义放在另外一个类的定义内部,这就是内部类,内部类容许你把一些逻辑相关的类组织在一块儿,并控制内部类的可视性,内部类和组合是彻底不一样的概念,这点要注意。
最初,内部类看起来就是一种类隐藏机制,将类置于其余类的内部,可是其实内部类用途远远不止这些,它能够和外部类进行通讯,并且你用内部类写出的代码更加优美清晰。
定义:在一个类内部定义类
内部类的写法:class 类名{ }
它能够直接访问和引用他的外部类的全部变量和方法,与外部类相比,内部类能够声明为private或protected.
用static修饰一个内部类时(嵌套类),这个类至关因而一个外部定义的类,因此static的内部类中可声明static成员
static内部类不能使用外部类的非static成员变量
函数的局部变量(形参也是局部变量),内部类的成员变量,外部类的成员变量重名,用如下方式来明确指定咱们真正要访问的变量。
public class Outer { private int size; class Inner { private int size; public void doStuff(int size) { size++; // 引用的是doStuff函数的形参 this.size++; // 引用的是Inner类中的成员变量 Outer.this.size++; // 引用的Outer类中的成员变量 } } }
内部类如何被外部类引用?
内部类能够经过建立对象从外部类以外被调用,只要将内部类声明为public
public class Outer { private int size; class Inner { private int size; public void doStuff(int size) { size++; // 引用的是doStuff函数的形参 this.size++; // 引用的是Inner类中的成员变量 Outer.this.size++; // 引用的Outer类中的成员变量 } } public static void main(String[] args) { Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); inner.doStuff(1); } }
方法中定义内部类?
内部类并不是只能在类里定义,也能够在几个程序块的范围以内定义内部类。例如在方法或for循环体内部,都可以.
在方法中定义的内部类只能访问方法中的final类型的局部变量。
public void testClassInMethod(final String arg) { class ClassInMethod { void test() { System.out.println(arg); } } }
匿名内部类?
只须要为局部内部类创建一个对象,没必要为该类指定一个名字。
public Inner testAnonyClassInMethod() { return new Inner() { // 此处为一个匿名类定义,没有类名,意思为建立一个继承自Inner内部类的对象 @Override public void doStuff(int size) { super.doStuff(size); } }; }
抽象类和接口的区别与联系。
一个类能够实现多个接口, 而一个类只能继承一个抽象类。
接口只定义方法,实现一个接口就是要实现接口的全部方法。而抽象类能够实现部分方法。
多个无关的类能够实现同一个接口,一个类能够实现多个无关的接口