您的位置:首页 > 职场人生

黑马程序员- 动态代理 ,接口 ,抽象类

2016-01-27 21:18 597 查看
包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:

  1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

  2)抽象类不能用来创建对象;

  3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

在其他方面,抽象类和普通的类并没有区别。

interface 接口泛指供别人调用的方法或者函数,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。

1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;

  2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

  3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

  4)一个类只能继承一个抽象类,而一个类却可以实现多个接口

动态代理

“`

代理设计模式:为其他对象提供一种代理以控制对这个对象的访问。

动态代理使用:

public interface Subject

{

public void doSomething();

}

public class RealSubject implements Subject

{

public void doSomething()

{

System.out.println( “call doSomething()” );

}

}

public class ProxyHandler implements InvocationHandler

{

private Object proxied;

public ProxyHandler( Object proxied )

代理设计模式:为其他对象提供一种代理以控制对这个对象的访问。

动态代理使用:public interface Subject

{

public void doSomething();

}

public class RealSubject implements Subject

{

public void doSomething()

{

System.out.println( “call doSomething()” );

}

}

public class ProxyHandler implements InvocationHandler

{

private Object proxied;

public ProxyHandler( Object proxied )

“`{

this.proxied = proxied;

}

public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable

{

//在转调具体目标对象之前,可以执行一些功能处理

//转调具体目标对象的方法
return method.invoke( proxied, args);

//在转调具体目标对象之后,可以执行一些功能处理


}

}

}

public interface Subject

{

public void doSomething();

}

public class RealSubject implements Subject

{

public void doSomething()

{

System.out.println( “call doSomething()” );

}

}

public class ProxyHandler implements InvocationHandler

{

private Object proxied;

public ProxyHandler( Object proxied )

{

this.proxied = proxied;

}

public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable

{

//在转调具体目标对象之前,可以执行一些功能处理

//转调具体目标对象的方法
return method.invoke( proxied, args);

//在转调具体目标对象之后,可以执行一些功能处理


}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: