JavaSE 基础(九)面向对象(下)

本文详细介绍了Java中的instanceof操作符、内部类(包括静态与非静态)、static关键字的用途,如静态变量、静态方法和静态代码块。接着讨论了抽象类的概念、特点以及抽象方法的使用。最后,探讨了接口的定义、实现及其与抽象类的主要区别,强调了接口在多实现中的重要性。
摘要由CSDN通过智能技术生成

1. instanceof 和 类型转换

  • instanceofJava 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例或者是右边类的子类的实例,返回 boolean 的数据类型。
  • 对于向下转型(父类转换为子类),必须进行强制类型转换;对于向上转型(子类转换为父类),不必使用强制类型转换。

2. 内部类

  • 内部类有两种:

    • 非静态内部类

      • 非静态内部类是一个类中嵌套着另外一个类。 它有访问外部类成员的权限, 通常被称为内部类。

        class OuterClass {   // 外部类
            // ...
            class InnerClass { // 内部类
                // ...
            }
        }
        
      • 由于内部类嵌套在外部类中,因此必须首先实例化外部类,然后创建内部类的对象来实现。

        OuterClass myOuter = new OuterClass();
        OuterClass.InnerClass myInner = myOuter.new InnerClass();
        myInner.属性名/方法名();
        
      • private 修饰的内部类不可被外部类访问。

      • 内部类可以访问外部类的属性和方法。

        myInner.外部类属性名/外部类方法名()
        
    • 静态内部类

      • 静态内部类使用 static 关键字定义。

        class OuterClass {
            //...
            static class InnerClass {
          	//...
          }
        }
        
      • 静态内部类不需要创建外部类来访问,可以直接访问它。

        OuterClass.InnerClass myInner = new OuterClass.InnerClass();
        myInner.属性名/方法名();
        
      • 静态内部类无法访问外部类的成员。

3. static 关键字

  • 静态类:使用 static 关键字修饰的内部类,就是静态类

  • 静态变量:当成员变量声明时使用了 static 关键字,那么这个变量称为静态变量,静态变量访问时不需要创建对象,可直接通过 类名.变量名 访问。

  • 静态方法:使用 static 关键字修饰的方法为静态方法,可直接使用 类名.方法名() 调用。

  • 静态代码块:使用 static 修饰的代码块就是静态代码块,该代码块仅在该类被加载时执行一次。

  • 静态导入包:

    //不导入包
    System.out.println();
    //导入包
    import static java.lang.System.out;
    out.println();
    

4. 抽象类

  • 抽象类的声明

    public abstract class Student{
        //类体
    }
    
  • 抽象类的实现

    public class Classmate extends Student{
        //类体
    }
    
  • 抽象方法

    /**
     *如果一个类包含抽象方法,那么该类必须是抽象类。
     *任何子类必须重写父类的抽象方法,或者声明自身为抽象类。
     */
    public abstract double study();
    
  • 抽象类的特点:

    • 抽象类不能被实例化。只有抽象类的非抽象子类可以创建对象。
    • 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
    • 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
    • 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
    • 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

5. 接口

  • 由于 Java 只有单继承关系,一个类只能继承一个抽象类,很不方便,所以接口应运而生了。一个类可以变相继承多个接口,准确的说是实现多个接口,即单继承,多实现

  • 接口定义

    [访问权限] interface 接口名称 [extends 其他的接口名] {
         // 声明变量
         // 抽象方法
    }
    
  • 接口实现

    public class 类名 implements 接口名1, 接口名2...{
        //方法实现
    }
    
  • 接口的特点

    • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
    • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
    • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
  • 接口与抽象类的区别

    参数抽象类接口
    方法可以有方法体不能有方法体
    变量各种类型只能是 public static final 类型
    静态可以有静态代码块和静态方法不能含有静态代码块以及静态方法
    继承一个类只能继承一个抽象类一个类却可以实现多个接口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值