final、匿名内部类、成员内部类、静态内部类

目录

一、final的使用

二、接口

1.概述

2.与抽象类的异同

3.具体使用 

4.内部类

成员内部类

静态内部类

局部内部类


一、final的使用

描述:final是最终的,不可改变的含义;可以修饰在类,方法,变量中

修饰类: 该类不能被继承

修饰方法:该方法不能被重写

修饰变量:变量变为常量
        1.修饰成员变量--成员常量
            赋值方式:a.直接赋值  b.动态代码块 c.构造方法
        2.修饰静态变量--静态常量(状态值-做判断)
            赋值方式:a.直接赋值   b.静态代码块
        3.修饰局部变量
            a.基本类型局部变量:值不可变

            b.引用类型局部变量:地址不可变

二、接口

1.概述

描述:接口是特殊的抽象类;

特殊性:可以看成抽象的事物;没有继承关系,但是有相应的应用场景---多态

接口中的方法也是抽象的,需要通过实现类来完成

定义接口:interface 接口名 定义实现类: 类 implements 接口

2.与抽象类的异同

相同点:

都可以生成class文件

都不能实例化对象

可以作为引用类型来使用(多态)

都可以调用Object(祖宗类)的方法--继承性

不同点:

接口中定义的属性都是公开的静态常量

接口中定义的方法都是公开的抽象方法

接口中不能有构造方法,没有动态代码块和静态代码块

3.具体使用 

面向接口的好处:扩展性,维护性更强; 更容易更换具体实现;解耦合性更强

耦合性:类与类的联系很紧密;解耦合就是为了让类之间的关系更独立一些---代码分离性更好

接口传参多态,与抽象类传参多态类似;就是将接口引用通过参数形式接收实现类对象;

哪个实现类对象传给接口引用,接口引用则调用该实现类重写方法-----接口回调

接口实现多态的应用场景2:传参的多态---作为某种标准或约定来使用

结论:接口的应用就是多态的应用,参考抽象类实现多态即可

4.内部类

概述:在一个类的内部,又包含了一个完整的类;这个完整的类就是内部类

特点:

内部类也会生成独立的class文件

在内部类中可使用外部类的私有成员,而不破坏封装性

可以将外部类的一些功能交给内部类来完成

内部类可以分为:成员内部类,静态内部类,局部内部类(了解), 匿名内部类(常用)

成员内部类
//将外部内的求和功能交给内部类来完成
class Outter{  //外部类
    private String name="张三疯";
    public int add(int a,int b) {
        return new Inner().addFun(a,b);
    }
    class Inner{ //成员内部类
        private String name="张无忌";
        //private static int age; //在成员内部类中不能使用static;除非静态常量
        public int addFun(int a, int b) {
            //可以直接使用外部类的私有成员; 重名时作用域小的优先
            System.out.println(name);  //张无忌
            System.out.println(Outter.this.name);  //张三疯
            return a+b;  //场景:将某些功能,交给内部类完成
        }  
    }
}
public class Test1 {
    public static void main(String[] args) {
        //Outter out = new Outter();
        //System.out.println(out.add(1, 2)); //调用外部类方法,完成功能
        
        //直接调内部类的方法: 通过外部类对象才能new内部类
        Outter.Inner inner = new Outter().new Inner();
        System.out.println(inner.addFun(2, 3));
    }
}
静态内部类

描述:在内部类中加static修饰

import com.qf.d_inner.A.B;  //需要导入静态内部类的包
//静态内部类案例
class A{
    private int age = 30;  //外部类的私有成员
    static class B{  //静态内部类
        static String name; //在静态内部类中,可以定义静态成员
        public void show() {
            //System.out.println(age); //静态内部类中,不能使用外部类属性--加载时机
            System.out.println("静态内部类中的方法调用");
        }
    }
}
public class Test2 {
    public static void main(String[] args) {
        //实例化静态内部类方式1:
        A.B b = new A.B(); //static的资源需要类来调
        b.show();
        
        //简化方式:
        B b2 = new B();
        b2.show();
    }
}
局部内部类

描述:局部内部类,就是在外部类的方法体中定义的内部类;在外面无法调用,只能在当前方法体中调用

局部内部类不能加public修饰

class AA{
    public void show() {
        //局部内部类--不常用,外部调不出来
        
        int age = 3; //在局部内部类中使用局部变量时会变为常量+final
        //原因:为了保证在内部类中局部变量作用域的一致性,才自动+final
        class BB{ //外部类的方法体中定义的局部内部类
            public void test() {
                System.out.println("局部内部类..."+age);
            }
        }
        
        new BB().test(); //在外部内的方法体中调用局部内部类功能
    }
}
public class Test3 {
    public static void main(String[] args) {
        new AA().show();
    }
}

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值