一、接口:是对类的一组需求的描述。接口中所有的方法自动地属于public,所以不用提供关键字public。在接口中还可以定义常量,但是接口绝对不能含有实例域,也不能在接口中实现方法。类实现接口用implements关键字,实现接口要实现接口的所有方法,并且方法必须声明为public。
Arrays里的静态方法sort(Object[] o)要求数组中的元素必须属于实现了Comparable接口的类(实现该接口的int CompareTo(T other)方法)。
1、接口的特性:不能使用new运算符实例化一个接口,但是可以声明一个接口的变量引用一个实现了该接口的类的对象。可以使用instanceof来检查某个对象是否实现了某个接口。接口中的域将被自动设为public static final。JAVA每个类只能够拥有一个超类,但却可以实现多个接口,实现的各个接口用逗号隔开。
二、对象克隆:先掌握protected这个访问权限:相同包里的类可以互相访问protected方法,子类可以访问超类的protected方法,但是超类并不能访问子类的protected方法,就算是子类覆盖了超类的方法。子类都继承父类的protected方法,并且也是protected的,如果子类不在一个包下,也不能互相访问这个继承于超类的方法,也就是说子类继承的超类的protected的方法不具有包的访问权限,要访问的话除非又让另一个类去继承他。(不是所有的子类都可以看做是一个超类吗?但是这里一定要注意,他们继承超类的protected方法不能互相访问,除非他们和超类在一个包下)
浅克隆:就是对对象里面的其他对象的引用做拷贝,而引用指向的是同一对象,这样的克隆,只有本类对象才能克隆本类对象,调用的是Object的克隆方法。
深克隆:让类继承标记接口Cloneable,并使用public修饰符重新定义clone方法,并调用超类的super.clone(),必继续克隆对象里的实例域(那么该实例域的类也应该继承Cloneable接口,如果没有那么会抛出一异常个ClonenotSupportedException),这样克隆的是值,而不是引用。
三、接口与回调:一般是定义一个接口,其他类的方法接受这个接口,并去调用这个接口的实现类里面的方法。
四、内部类:
1、使用内部类的主要原因:内部类可以访问类定义所在的作用域中的数据,包括私有数据;内部类可以对同一个包中的其他类隐藏起来;可以使用匿名的内部类可以让代码简洁。
2、普通内部类的特性:内部类的对象总有一个隐式引用,它指向了创建它的外部类对象。实际上是编译器修改了内部类的构造器,为内部类添加了一个外围类的引用。内部类可以为私有的,这样只有它的外围类才能产生这个内部类的对象。如果是一个公用的内部类,那么可以先new一个外围类的对象,然后用这个外围的对象去new一个内部类的对象,语法是OuterClassInstance.new InnerClass(),示例:
class Outer{
private String str="PRIVATE";
public class Inner{
public void callOuter(){
System.out.println(Outer.this.str);
}
}
}
public class Test{
public static void main(String[] args){
Outer outer=new Outer();
Outer.Inner inner=outer.new Inner();
inner.callOuter();
}
}
需要注意的是:内部是一种编译器现象,而与虚拟机无关的。内部类可以访问外围类的私有数据。内部类怎么去调用外围类的私有变量:其实是编译器编译时就给外围类添加了一个静态的方法,而内部类去调用这个方法。
javap -private||public ClassName 可以反射编译后的类。
3、局部内部类:不能用public说明符进行说明。在局部方法里的内部类,在外围内的其他方法里无法访问,但是这个内部类不仅可以访问外围类变量,还可以访问局部变量,不过为了维护数据的同一,要被访问的局部变量必须声明为final。(可以用一个对象的引用作为final,这样引用的对象里的值可以变,只是不可以让他去引用其他对象,比如可以用数组变量声明为final).
4、匿名内部类:假如只创建这个类的一个对象,就不必命名了,这个叫匿名的内部类。由于匿名类没有类名,所以匿名类不能有构造器,取而代之的是会将参数传递给超类构造器。
5、静态内部类:如果使用内部类只是为了把一个类隐藏在另一个类的内部,并不需要内部类引用外围类对象,此时可以将内部类声明为静态的,可以取消产生的对外围类的引用。静态的内部类可以在其他类中访问,要加上外围类名修饰:OuterClassName.InnerclassName innerclass=new OuterClassName.InnerclassName();
五、代理:利用代理可以在运行时创建一个实现了一组给定接口的新类,这样不用实现接口而用代理类去调用方法。代理需要掌握的类主要是:Proxy和InvocationHandler.所有代理类都覆盖了Object中的:tostring,equals,hashcode,这些方法也是调用invoke,Object中的其他方法没有被覆盖。
代理示例:
import java.lang.reflect.*;
public class MyProxy {
public static void main(String []args){
Myinterface o=(Myinterface)Proxy.newProxyInstance
(Thread.currentThread().getContextClassLoader(),
new Class[]{Myinterface.class},
new MyInvocationHandle("ss"));
System.out.println(o.myMethod("xx"));
}
}
class MyInvocationHandle implements InvocationHandler{
private String s;
public MyInvocationHandle(String s){
this.s=s;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("代理成功");
System.out.println(method.getName());
return args[0].toString();
}
}
interface Myinterface{
String myMethod(String s);
}
分享到:
相关推荐
JAVA基础——Java内部类.ppt
JAVA超全知识点总结——核心面试知识汇总-共283页.pdf
全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、泛型程序设计、集合以及多线程等内容。. 全书对Java...
java 基础知识储备(csdn)————程序
深入体验Java Web开发内幕——核心基础 深入体验Java Web开发内幕——核心基础
博客《java基础——接口》的示例代码,通过标记接口分类,展示继承、多继承等效果,便于体会接口的意义。
java核心知识点整理,java核心知识资料自学,java自学资料,适合有java基础的人,愿意对技术做进一步的提升,对java底层基础有浓厚兴趣的人。
Java 语法总结——线程Java 语法总结——线程Java 语法总结——线程Java 语法总结——线程
黑马程序员入学Java知识——精华总结
java 几种内部类(基础)(csdn)————程序
Java基础知识——Java入门与加深: 采用自问自答的形式提供给大家参考 别只顾下载哦 多少也顶一下嘛
java基础知识详细笔记,通俗易懂,涵盖全面,欢迎下载学习
这是第一部分,其他部分可以在我的上传资源列表里... ■接口与内部类 ■事件监听Qi模型 ■Swing图形用户界面程序设计 ■打包应用程序 ■异常处理 ■登录与调试 ■泛型程序设计 ■集合框架 ■多线程
java 基础语法学习(csdn)————程序
动力节点老杜Java基础入门学习教程分享——常用类
Java开发基础(付费教学内容)——第4章 JAVA内部的秘密.ppt
该ximind文档为Java基础知识汇总,包括Java基本分类、Java的变量、Java的运算符、Java常用的工具介绍、流程控制语句、数据、面向对象等知识总结。