抽象类 instanceof关键字

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 个特征如下:

    1. 抽象方法没有方法体
    2. 抽象方法必须存在于抽象类中
    3. 子类重写父类时,必须重写父类所有的抽象方法

    注意:在使用 abstract 关键字修饰抽象方法时不能使用 private 修饰,因为抽象方法必须被子类重写,而如果使用了 private 声明,则子类是无法重写的。

    抽象类的定义和使用规则如下:

    1. 抽象类和抽象方法都要使用 abstract 关键字声明。
    2. 如果一个方法被声明为抽象的,那么这个类也必须声明为抽象的。而一个抽象类中,可以有 0~n 个抽象方法,以及 0~n 个具体方法。
    3. 抽象类不能实例化,也就是不能使用 new 关键字创建对象。
  • 抽象类的定义和使用规则如下:

    1. 抽象类和抽象方法都要使用 abstract 关键字声明。
    2. 如果一个方法被声明为抽象的,那么这个类也必须声明为抽象的。而一个抽象类中,可以有 0~n 个抽象方法,以及 0~n 个具体方法。
    3. 抽象类不能实例化,也就是不能使用 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
      */
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值