zoukankan      html  css  js  c++  java
  • java基础知识--类和接口

     类

      普通类和抽象类

      类:是一组相关属性和行为的集合。(内部封装了成员变量、构造方法、成员方法)

        对象:是一类事物的具体体现。对象是类的实例,必然具备该类事物的属性和行为。

      类和对象的关系:类是对象的抽象,对象是类的实体。

      构造方法<作用>:初始化成员变量。

    普通类:没有被abstract修饰,没有抽象方法的类。

    抽象类:被abstract修饰,可能含有抽象方法的类。

    两者的区别:① 含有抽象方法的类,一定是抽象类;

          ② 抽象类有构造器,但不能被实例化;(因为抽象方法没有方法体,不需要实现。)

          ③ 抽象类被abstract修饰,而普通类没有;

          ④ 抽象类的子类,必须重写父类中的所有抽象方法。除非子类也是抽象类。

        

      内部类:将一个类A定义在类B或者方法C里面,类A即为内部类。内部类中不能定义静态成员。

        作用:①方便代码编写  ②使得多继承机制变得更加完善  ③省去实现类的定义

        补充:内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。比如,Person$Heart.class(内部类编译文件)

      成员内部类:定义在类中 方法外的类。

        格式如下

    class 外部类 {
        class 内部类 {
            //
        }  
    }
    

        访问特点

    •  内部类可以直接访问外部类的成员,包括私有成员和静态成员。
    •  外部类要访问内部类的成员,必须要建立内部类的对象。(创建成员内部类对象格式:外部类名.内部类名 对象名= new 外部类型().new 内部类型();
    •  当成员内部类拥有和外部类同名的成员变量和方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员,如果想访问外部类的成员,则需要以下形式进行访问:
              • 外部类.this.成员变量/成员方法

      匿名内部类:没有名字的内部类,是内部类的简化写法,是唯一一种没有构造器的类。实现前提是必须继承一个父类或者实现了一个父接口。

        格式

    new 父类名或者接口名() {
        //方法重写
        @override
        public void method( ) {
            //执行语句
        }
    }
    

        举例

    // 抽象类
    public abstract class FlyAble{
        public abstract void fly();
    }
    
    //demo
    public class demo {
        public static void main( string[]args) {
          /*
          *    创建匿名内部类,直接传递给showFly(FlyAble f)
          */
          showFly(  
              new FlyAble(){
                  public void fly() {
                      system.out.println("我飞了~~~" );
                  }
              }
          );
    
          public static void showFly(FlyAble f) {
              f.fly();
          }
        } }

      静态内部类:也是定义在一个类里面的类,用static修饰,不需要依赖于外部类,并且不能使用外部类的非static成员访问,因为外部类的非static成员必须依附于具体的对象。

             创建静态内部类对象格式:外部类名.内部类名 对象名= 外部类对象名.new 内部类名();

    接口

      概念:是java语言中的一种引用类型,是方法的集合(封装了方法),包含抽象方法(JDK7及以前),默认方法和静态方法(JDK8),私有方法(JDK9,供默认方法和静态方法调用)。

        ① 类对接口可以多实现,使用implements关键字;接口对接口可以多继承,使用extends关键字;

          多实现中,实现类必须重写所有的抽象方法,如果抽象方法有重名,只需要重写一次; 

        ② 继承了接口的默认方法,可以使用子类的对象直接调用,也可以重写默认方法;

          多实现中,如果默认方法有重名,必须重写一次;

          子接口重写默认方法时,default关键字可以保留。
          子类重写默认方法时,default关键字不可以保留。

        ③ 静态与.class文件相关,只能使用接口名调用,不可以通过实现类的类名或者实现类的对象调用;

        ④ 私有方法的调用:

          a.私有方法:只有默认方法可以调用;

          b.私有静态方法:默认方法和静态方法都可以调用;

        ⑤ 接口中,存在同名的静态方法并不会冲突,原因是只能通过各自接口名访问静态方法;

        ⑥ 优先级的问题:当一个类,既继承一个父类,又实现若干个接口时,父类中的成员方法与接口中的默认方法重名,子类就近选择执行父类的成员方法;

        ⑦ 接口中,无法定义成员变量,但是可以定义静态常量,其值不可以改变,默认使用public static final修饰;

        ⑧ 接口中,没有构造方法,不能创建对象;

        ⑨ 接口中,没有静态代码块。

  • 相关阅读:
    BZOJ 3150 [Ctsc2013]猴子 ——期望DP 高斯消元
    BZOJ 4569 [Scoi2016]萌萌哒 ——ST表 并查集
    BZOJ 4590 [Shoi2015]自动刷题机 ——二分答案
    BZOJ 3462 DZY Loves Math II ——动态规划 组合数
    BZOJ 4827 [Shoi2017]分手是祝愿 ——期望DP
    BZOJ 4827 [Hnoi2017]礼物 ——FFT
    BZOJ 4826 [Hnoi2017]影魔 ——扫描线 单调栈
    ZOJ 3874 Permutation Graph ——分治 NTT
    UVA 12633 Super Rooks on Chessboard ——FFT
    HDU 2065 "红色病毒"问题 ——快速幂 生成函数
  • 原文地址:https://www.cnblogs.com/sun9/p/13431214.html
Copyright © 2011-2022 走看看