java基础 ---- 引用类型的用法
引用类型的理解概述:
类,接口一方面是对实物的模拟,另一方面类,接口作为引用数据类型,如同基本数据类型一样,可以作为成员变量,方法参数,方法返回值。
引用类型的使用概述:
- 成员变量:Class类作成员变量,赋值赋对象;接口作成员变量,赋值赋实现类对象。其中接口成员变量赋值时是通过构造方法或者set()方法传入实现类的对象,接口作方法参数可以用匿名类,或者匿名类暨匿名对象。
- 返回值:方法返回什么,就用什么类型的变量去接收。
- 形参:递给方法对象的类型 ,要小于等于形参的类型。 类:类本身的对象,类的子类对象 (小于等于);抽象类:抽象类的子类对象(小于); 接口:实现类的对象(小于)。
接口作成员变量,方法参数,方法返回值,匿名内部类,匿名对象的最终测试代码:
/**
* 构造一个接口
*/
interface MyInterface {
public void method();
}
/**
* 构造一个类以该接口作为成员变量,方法参数,方法返回值
*/
class MyClass {
//接口作为成员变量
private MyInterface myInterface;
MyClass() {
}
//接口数据类型作为方法参数
public void setMyInterface(MyInterface myInterface) {
this.myInterface = myInterface;
}
//方法返回接口数据类型
public MyInterface getMyInterface() {
return myInterface;
}
public void show() {
myInterface.method();
}
}
/**
* 构造一个类实现该接口
*/
class MyInterfaceImpl implements MyInterface {
@Override
public void method() {
System.out.println("AAA");
}
}
public class MyTest {
/**
* 新建一个以接口为成员变量的类的对象
* 测试分别用实现类的匿名对象,匿名内部类,匿名内部类和匿名对象三种方法为set()方法传入参数
* 测试对象在上述三种方法下调用show()方法
*/
public static void main(String[] args) {
MyClass myClass = new MyClass();
//
//使用单独定义的实现类
myClass.setMyInterface(new MyInterfaceImpl());
myClass.show();//AAA
//MyInterface a = myClass.getMyInterface(); 当接口成员变量没有名称时,用接口类型接受该成员变量
//a.method(); AAA
//
// 简化为使用匿名内部类
MyInterface p = new MyInterface() {
@Override
public void method() {
System.out.println("BBB");
}
};
myClass.setMyInterface(p);
myClass.show();//BBB
//进一步简化,同时使用匿名内部类和匿名对象
myClass.setMyInterface(new MyInterface() {
@Override
public void method() {
System.out.println("CCC");
}
});
myClass.show();//CCC
}
}