instanceof 与isAssignableFrom
程序员文章站
2022-03-13 10:49:17
...
instanceof 针对实例
isAssignableFrom针对class对象
isAssignableFrom 是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。
通常调用格式是
Class1.isAssignableFrom(Class2)
调用者和参数都是 java.lang.Class 类型。
而 instanceof 是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。
格式是: oo instanceof TypeName
第一个参数是对象实例名,第二个参数是具体的类名或接口名,例如 String,InputStream。
public static void main(String[] args) throws Exception {
ArrayList list = new ArrayList();
System.out.println(list instanceof List);
System.out.println(list.getClass().isAssignableFrom(List.class));
System.out.println(List.class.isAssignableFrom(list.getClass()));
结果:
true
false
true
其中instanceof是子--》父
isAssignableFrom是夫--》子
我们应该尽量少用instanceof 运算符
应该尽量用多态来替代它
接口
//账目
public interface Accounts {
}
//水费
public class WaterAccounts implements Accounts {
}
//电费
public class ElectricityAccounts implements Accounts {
}
//客户端
public class test {
public static void main(String[]args){
Accounts accsWater= new WaterAccounts ();
Accounts accsElectricity= new ElectricityAccounts ();
acceptAcounts(accsWater);
}
//第一种使用instanceof
public static void acceptAcounts(Accounts accs){
if(accs instanceof WaterAccounts ){
System.out.println("收水费");
}else if(accs instanceof ElectricityAccounts ){
System.out.println("收电费");
}
}
//第二种使用多态
public static void acceptAcounts(WaterAccounts accs){
System.out.println("收水费");
}
public static void acceptAcounts(ElectricityAccounts accs){
System.out.println("收电费");
}
}
上一篇: 适配器模式