java 接口和内部类

接口是对类的一组需求描述。接口中的方法自动的属于public。接口中的属性自动的属于public static final。因此接口中的属性是常量,必须声明的时候进行初始化。
下面是一个接口的示例:
public interface InterfaceM {
    String id="1190";
    void value();
}

实现测试类:
public class Test implements InterfaceM{

    @Override
    public void value() {
        System.out.println("id:"+Test.id);
    }
     
    public static void main(String[] args){
        (new Test()).value();
        
    }
}

运行结果:
run:
id:1190
成功生成(总时间:1 秒)

接口和抽象类的比较
先说一下接口和抽象类的一些区别:
接口的属性是常量;抽象类的属性则没有什么限制,同正常类的属性是一样的。接口的方法都是方法的声明,没有实现,就是没有方法体;抽象类的方法中非抽象方法和正常类的一样,抽象方法要加abstract修饰,同时没有方法体。更深层次的区别是接口时一种双方交互的协议;抽象类则是一种类型的限定,一种提供公共属性和方法的载体。
更底层的区别是Java选择单继承多实现的原因是多继承会让语言本身变得更加复杂,效率也会降低。

内部类
使用内部类的原因有三点:
内部类可以访问该类作用域中所有的数据,包括私有数据
内部类可以对同一个包中的其他类隐藏起来
当想要定义一个回调函数且不想编写大量的代码时,使用匿名内部类比较便捷。

先看下面的一个例子:
public class Test{
    private String id="1899";

    private void detai(){
       System.out.println("I am a private method in Test class!");
    }
    
    public class Inner{
       public void info(){
          System.out.println("id:"+id);
          
          detai();
          System.out.println("I am a inner class method");
       }
    }
    
    public void value(){
       Inner inner=new Inner();
       inner.info();
       System.out.println("I'm a public method in Test class!");
    }
   

     
    public static void main(String[] args){
       Test test=new Test();
       test.value();
        
    }
}
运行结果:
run:
id:1899
I am a private method in Test class!
I am a inner class method
I'm a public method in Test class!
成功生成(总时间:0 秒)
从这里面可以看见一些内部类的语法规则:
可以毫无限制的引用外部类的属性和方法,private限定不起作用
外部类引用内部类可以像引用其他类一样的引用方式,static参照其他的普通类一样使用。

下面是局部内部类的情形:
public class Test{
    private String id="1899";

    private void detai(){
       System.out.println("I am a private method in Test class!");
    }

    public void value() {
         class Inner {
            public void info() {
                System.out.println("id:" + id);
                detai();
                System.out.println("I am a inner class method");
            }
        }
        Inner inner = new Inner();
        inner.info();
        System.out.println("I'm a public method in Test class!");
    }
   

     
    public static void main(String[] args){
       Test test=new Test();
       test.value();
        
    }
}

如果内部类没有引用外部类的非静态属性和方法,可以把内部类声明为static,来消去对外部类的引用。

一般在开发中最常用的是接口,内部类多用在swing等图形界面开发添加Listener的时候使用。

你可能感兴趣的:(java)