• Java抽象类、接口、内部类


    抽象类的概念:

    1、Java中可以定义没有方法体的方法,还方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类;

    2、如,shape类计算周长和面积的方法无法确定,那么就可以将这样的方法声明为抽象的,以便在具体的子类中实现

    抽象类的特征:

    抽象方法的声明

    修饰符abstract 返回值类型 方法名([参数列表]);

    注意:因为抽象方法无法确定具体执行的功能,所以抽象方法没有方法体,需要在小括号后加上分号

    抽象类的声明

    语法:修饰符 abstract class 类名 extends 父类名

    抽象类和普通类除了使用abstract修饰外和普通的类相似;

    抽象类中可以没有抽象方法;但是一旦某个有抽象方法,那么这个类必须被声明为抽象类

    static final private不能和abstract共存

    抽象类的使用:

    因为抽象类不是一个具体的类,所以无法实例化,但是抽象类可以用于声明变量

    抽象类可以被继承,在子类中实现所有抽象类的所有抽象方法,以达到抽象类的具体化;

    注意:因为抽象方法无法确定具体执行的功能,所有抽象方法没有方法体,需要在小括号后加上分号;

    抽象方法:不允许包含方法体;子类中需要重写父类的抽象方法,否则,子类也是抽象类

    格式:public abstract void eat();

    接口:在Java中接口不仅仅是程序开发过程中“约定”,更是更加抽象化的抽象类

          无法归纳到一个类的但某些特征相同

       语法:修饰符 interface 接口名{[常量];[抽象方法];}

        接口中抽象方法可以不写abstract关键字,访问修饰符默认public

        当类实现接口时,需要去实现接口中的所有抽象方法,否则需要将该类设置为抽象类;

        接口中可以包含常量,默认public static final

       接口也可以实现继承,并且可以继承多个父接口

          default:默认方法 可以带方法体 jdk1.8后新增;可以在实现类中重写,并且可以通过接口的引用调用

       static:静态方法 可以带方法体 jdk1.8后新增;不可以在实现类中重写,可以通过接口名调用

    接口实现的语法:修饰符 class类名 extends 父类名 implements 接口1,接口2,...{类体部分}

            一个类可以实现多个接口,从而解决了Java单继承的缺点

    接口之间的继承:在Java中类之间的继承关系是单继承,也就是说一个类有且只能有一个父类

            而Java中的接口实现了多继承,也就是说一个接口可以有多个父接口

    接口的作用:提高程序的重用性;提高程序的可扩展性;降低程序的耦合度;实现了多继承

    内部类

    什么是内部类? 在Java中,可以将类定义在另一个类里面或者一个方法里面,这样的类称为内部类

    内部类分类:

    成员内部类:将一个类定义在另一个类的成员位置;
      获取内部类对象实例,方式1:new外部类.new 内部类

                方式2:外部类对象.new 内部类

                方式3:外部类对象.获取方法

      1、内部类在外部使用时,无法直接实例化,需要借由外部类信息才能完成实例化;

      2、内部类的访问修饰符,可以任意,但是访问范围会受到影响;

      3、内部类可以直接访问外部类的成员;如果出现同名属性。优先访问内部类中定义的;

      4、可以使用外部类.this成员的方式,访问外部类中同名的信息;

      5、外部类访问内部类信息,需要通过内部类实例,无法直接访问;

      6、内部类编译后.class文件命名:外部类$内部类.class;

      7、内部类中是否可以包含与外部类相同方法签名的方法

    局部内部类:将一个类定义在另一个类的方法体中或者代码块中;

      1、定义在方法内部,作用范围也在范围内

      2、和方法内部成员使用规则以用,class前面不可以添加public、private、protected、static

      3、类中不能包含静态成员

      4、类中可以包含final,abstract修饰的成员

      

    静态内部类:将一个类定义在另一个类的成员位置,并且static修饰符;

      1、静态内部类中,只能直接访问外部类的静态成员,如果需要调用非静态成员,可以通过对象实例

      2、静态内部类对象实例时,可以不依赖于外部类对象

      3、可以通过外部类.内部类.静态成员的方式,访问内部类中的静态成员

      4、当内部类属性与外部类属性同名时,默认调用内部类中的成员;如果需要访问外部类中的静态属性,则可以通过外部类.属性的方式;如果需要访问外部类中的非静态属性,则可以通过new外部类().属性的方式

    匿名内部类:匿名内部类没有名字

      1、匿名内部类没有类型名称、实例对象名称

      2、编译后的文件命名:外部类$数字.class

      3、无法使用private、public、protected、abstract、static修饰

      4、无法编写构造方法,可以添加构造代码块

      5、不能出现静态成员

      6、匿名内部类可以实现接口也可以继承父类,但是不能兼得

  • 相关阅读:
    Javascript的私有变量和方法、共有变量和方法以及特权方法、构造器、静态共有属性和静态共有方法
    Spring4整合Hibernate4出现的错误的解决
    Javascript类的创建
    Kettle学习总结(一)
    Kettle Excel导入数据到数据库
    Python 爬虫 2 (转)
    Js仿腾讯微博效果
    飘雪效果
    列表获取对应图片
    飞入购物车
  • 原文地址:https://www.cnblogs.com/scar1et/p/10962005.html
Copyright © 2020-2023  润新知