接口与抽象类

1.接口函数特性

接口中的函数默认是public的,这和类中的函数默认是package权限的是不同的,并且不可以将public变成其他权限,代码如下:
public interface Father {

	void print();
	public void printPublic();
	//Illegal modifier for the interface method printProtected; only public, abstract, default, static and strictfp are permitted
	//protected void printProtected();
	//private void printPrivate();
}

2.接口属性特性

接口与抽象类的一个区别是抽象类可以有属性,接口中的属性则受到很大限制,即使变量没有修饰符,默认也是public static final,
因为public static来保证接口中的变量被所有类共有,而接口是用于定义规范的,不定义为final的话,没有必要需要字段,不过接口中一般都没有属性。

3.内部类访问外部类的成员变量

public class Outer {

	int outeri = 100;
	class Inner{
		public void print(){
			System.out.println("i = " + outeri);
		}
	}
	
	public Inner getInner(){
		return new Inner();
	}
	
	public static void main(String[] args) {
		Outer outer = new Outer();
		outer.getInner().print();
		outer.new Inner().print();
	}
}

输出如下:
i = 100
i = 100

内部类可以访问外部类的成员

4.匿名内部类

public abstract class Abstract {
	int i;
	public abstract void print();
}
public class Caller {

	public Abstract getAbstract(){
		return new Abstract() {
			@Override
			public void print() {
				System.out.println("this is in the abstract");
			}
		};
	}
	
	public static void main(String[] args) {
		Caller caller = new Caller();
		caller.getAbstract().print();
	}
}
输出如下:
this is in the abstract

5.匿名内部类的参数默认是final的

public class Caller {

	public Abstract getAbstract(String haha){
		return new Abstract() {
			@Override
			public void print() {
				//Local variable haha defined in an enclosing scope must be final or effectively final
				//haha = "innerclass";
				System.out.println(haha);
				System.out.println("this is in the abstract");
			}
		};
	}
	
	public static void main(String[] args) {
		Caller caller = new Caller();
		caller.getAbstract("haha").print();
	}
}
输出如下:
haha
this is in the abstract

可以看到匿名内部类是可以使用参数的,但是参数默认是final的





相关内容:
前言
对象和类型
操作符和引用
流程控制语句
初始化和清理
访问控制
组合和继承
接口和多态
接口与抽象类
容器
异常
类型信息
泛型
数组
IO系统
枚举类型
注解
多线程
总结