java接口和内部类

简介: java接口和内部类
java接口和内部类

接口
接口定义

特殊的抽象类

  • 接口的所有数据成员都是静态的且必须初始化
  • 所有的方法必须都是抽象方法,不能有一般方法
权限修饰符 interface 接口名称 [extends 父接口名列表]{
  public static 数据类型 成员变量名 = 常量;
    publict abstract 函数标签;
}

接口定义中的修饰符可以省略,默认为以上访问权限

接口实现

接口和抽象类都不能用来实例化对象

class 类名 implements 接口名表{
}

如果实现某接口的类不是抽象类,则必须实现指定接口的所有抽象方法。

任何实现该接口的类实例化的对象,都可以存储在该接口类型的变量中,通过这些变量访问类所实现你的接口中的方法。

接口的继承

接口可以使用继承派生出新的类,extends

一个接口可以同时有多个直接父接口(多继承), 之间使用逗号分隔,子接口继承父接口的所有变量和方法。

如果子接口中定义了和父接口同名的常量,父接口中的常量被隐藏,如果是方法,则被覆盖.

interface B extends A{
    
}

一个类只能有一个直接父类,但是可以同时实现多个接口

public class Cylinder implements Face1,Face2{
    
}
内部类
定义

定义在类中的类

可以把内部类看作外部类的一个成员,拥有自己的成员变量和方法.

把类的定义放在一个用于封装它的类的内部.

  • 内部类不能与外部类同名
  • 在封装它的类内部使用内部类与普通类相同.在外部使用要在内部类前面加上它所属的外部类的名字.
  • 在用new 创建内部类时也要在new前面加上对象变量
public class Group{
    public class Student{
        ....
    }
    
    public void show(){
        Student stu = new Student(...);
    }
}
内部类和外部类的访问规则
  • 在外部类中通过一个内部类对象引用内部类中的成员.
    在内部类中可以直接访问它的外部类的成员
    内部类也可以通过创建对象从外部类之外被调用,但必须在内部声明为public
  • 在内部类对象中保存了一个对外部类对象的引用,当在内部类的成员方法中访问某一个变量时,如果在该方法和内部类中都没有定义这个变量,调用就会被传递给内部类保存的哪个对外部类的引用,通过这个外部类对象的引用调用变量.
  • 内部类编译完成后,产生的文件名为: 外部类名$内部类名.class
  • 内部类定义为抽象类,需要有其他内部类来继承或者实现
  • 内部类可以声明为protected, private
  • 内部类不能与包含它的外部类名相同
  • 内部类既可以使用外部类的成员变量,也可以使用内部类所在方法的局部变量
  • 内部类不光可以在类中定义,也可以在程序块中定义
    在方法中定义内部类,但是只能访问方法中final 类型的局部变量
  • 内部类可以声明为static, 静态内部类自动转换为顶层类,即它没有父类,而且不能引用外部类成员或者其他内部类中的成员,非静态内部类不能声明静态成员,只有静态内部类才能声明静态成员.
匿名内部类

可以利用内部类创建没有名字的内部类,进一步声明内部类和创建一个该类的对象

  • 创建匿名类的用意: 补充内部类中没有定义到的方法
  • 匿名内部类直接使用父类的名字或者实现接口的名字
  • 匿名类的定义和实例化对象同时进行
  • 匿名内部类没有名字,所以它前面不能有访问权限修饰符,也没有构造方法. 因为默认构造方法没有参数,所以创建对象时不能带参数.
( //创建匿名内部类,并执行定义的方法
    new 类名(){
        方法名(参数列表){
          // ...
        }
    }
).方法名(参数1, 参数2, ...)
public class Test{
    public static void main(String[] args){
     ( // 匿名类,对Inner内部类的补充
         new Inner(){
          void setName(String n){
               name=n;
               System.out.print("姓名:"+name);
           }
          }
      ).setName("张 三");
 }
 static class Inner{
     String name;
 }
}

匿名内部类编译完成后,所产生的文件名: 外部类类名$编号.class, 编号为1,2,3… 代表第几个匿名内部类

相关文章
|
26天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
102 3
|
2月前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
45 6
|
2月前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
33 2
|
17天前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
54 1
|
27天前
|
Java
java线程接口
Thread的构造方法创建对象的时候传入了Runnable接口的对象 ,Runnable接口对象重写run方法相当于指定线程任务,创建线程的时候绑定了该线程对象要干的任务。 Runnable的对象称之为:线程任务对象 不是线程对象 必须要交给Thread线程对象。 通过Thread的构造方法, 就可以把任务对象Runnable,绑定到Thread对象中, 将来执行start方法,就会自动执行Runable实现类对象中的run里面的内容。
39 1
|
1月前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
44 4
|
1月前
|
安全 Java
在 Java 中使用实现 Runnable 接口的方式创建线程
【10月更文挑战第22天】通过以上内容的介绍,相信你已经对在 Java 中如何使用实现 Runnable 接口的方式创建线程有了更深入的了解。在实际应用中,需要根据具体的需求和场景,合理选择线程创建方式,并注意线程安全、同步、通信等相关问题,以确保程序的正确性和稳定性。
|
1月前
|
Java
Java基础(13)抽象类、接口
本文介绍了Java面向对象编程中的抽象类和接口两个核心概念。抽象类不能被实例化,通常用于定义子类的通用方法和属性;接口则是完全抽象的类,允许声明一组方法但不实现它们。文章通过代码示例详细解析了抽象类和接口的定义及实现,并讨论了它们的区别和使用场景。
|
1月前
|
Java 测试技术 API
Java零基础-接口详解
【10月更文挑战第19天】Java零基础教学篇,手把手实践教学!
23 1
|
2月前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
22 3