instanceof 关键字详解
-
instanceof :判断一个对象是否为一个类(或接口、抽象类、父类)的实例
//语法格式如下所示 boolean result = obj instanceof Class
其中,obj 是一个对象,Class 表示一个类或接口。obj 是 class 类(或接口)的实例或者子类实例时,结果 result 返回 true,否则返回 false。
值得注意的是 obj 必须为引用类型,不能是基本类型
-
声明一个class类的对象,判断此对象是否为该class类的实例对象(很普遍的一种用法)
-
判断是否为直接或者间接子类,
Person person1=new Person(); //Object->Person->Teacher //Object->Person->Docter //Object->Person->Policeman System.out.println(person1 instanceof Person);//true System.out.println(person1 instanceof Object);//true System.out.println(person1 instanceof Teacher);//false System.out.println(person1 instanceof Policeman);//false //必须引用类型,不能为基本类型 int i = 0; System.out.println(i instanceof Integer); // 编译不通过 System.out.println(i instanceof Object); // 编译不通过
Java抽象(abstract)类
-
java语言提供了两种类,分别为具体类和抽象类。前面学习接触的类都是具体类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,那么这样的类称为抽象类。代码如下:
//方法体 }
如果一个方法使用 abstract 来修饰,则说明该方法是抽象方法,抽象方法只有声明没有实现。需要注意的是 abstract 关键字只能用于普通方法,不能用于 static 方法或者构造方法中。
抽象方法的 3 个特征如下:
- 抽象方法没有方法体
- 抽象方法必须存在于抽象类中
- 子类重写父类时,必须重写父类所有的抽象方法
注意:在使用 abstract 关键字修饰抽象方法时不能使用 private 修饰,因为抽象方法必须被子类重写,而如果使用了 private 声明,则子类是无法重写的。
抽象类的定义和使用规则如下:
- 抽象类和抽象方法都要使用 abstract 关键字声明。
- 如果一个方法被声明为抽象的,那么这个类也必须声明为抽象的。而一个抽象类中,可以有 0~n 个抽象方法,以及 0~n 个具体方法。
- 抽象类不能实例化,也就是不能使用 new 关键字创建对象。
-
抽象类的定义和使用规则如下:
- 抽象类和抽象方法都要使用 abstract 关键字声明。
- 如果一个方法被声明为抽象的,那么这个类也必须声明为抽象的。而一个抽象类中,可以有 0~n 个抽象方法,以及 0~n 个具体方法。
- 抽象类不能实例化,也就是不能使用 new 关键字创建对象。
-
练习:
- 创建一个图形抽象类
public abstract class Shape { int width; // 几何图形的长 int height; // 几何图形的宽 public Shape(int width, int height) { this.width = width; this.height = height; } public abstract double area(); // 定义抽象方法,计算面积
-
创建正方形子类
public class Square extends Shape { public Square(int width, int height) { super(width,heigh); } public double area(){ return this.width*this.heigh; }
-
创建三角形子类
public class Trangle extends Shape { public Trangle(int width, int height) { super(width,heigh); } public double area(){ return 00.5*this.width*this.heigh; }
-
创建测试类
public class Test(){ public static void main(String[] args){ Square square =new Square(5,6); System.out.println("面积为:"+square.area); Trangle trangle =new Trangle(5,6); System.out.println("面积为:"+trangle.area); } } /* 面积为:30.0 面积为:15.0 */