《final关键字,权限问题,内部类》

本文详细介绍了Java中的final关键字,包括其用于修饰类、方法和变量的含义和限制。同时,讲解了权限修饰符的四种类型及其作用范围。此外,还探讨了内部类的分类和使用规则,特别是局部内部类和匿名内部类的特性。最后,展示了类和接口作为成员变量的使用方式以及接口在方法返回值和参数列表中的应用。
摘要由CSDN通过智能技术生成

一.final关键字总结

存在意义(WHY):让类变得不能有子类即让类变得唯一,让变量不能再去更改

1.修饰类的情况:publuc final class{}

2.final修饰方法的时候:这个方法就是最终的方法不能再去修改(后期的重载与重写都不可),所以abstract关键字不能与final并存。那能不能重载呢?看4.

3.修饰局部变量:一次赋值,终生不可更改。

这里注意不可改变的基本数据类型的值,但是引用数据类型不一样,对于引用数据类型来说,不可改变的是地址值,但是内容是可以变的(通过调用里面的方法来实现内容的更替)

/*前面定义一个完整的finalMethod类*/
package Practice;

public class Final {
    public static void main(String[] args) {
        final FinalMethod finalMethod = new FinalMethod("afu");
        System.out.println(finalMethod);
        finalMethod.setName("afufu");
        System.out.println(finalMethod);
    }
}

//你会发现两次打印出的地址位置不变,但是内容变了!

4.修饰成员变量:成员变量具有默认值(0.0d,false,null,0等),所以必须手动赋值

原则:必须保证类中的所有重载构造方法(名字是一样的)都能对final成员变量进行赋值,所以在一个完整的类中setter方法应该注掉。空参构造里面应该加上对final成员变量的赋值,全参构造因为参数列表已经定义了,传进来什么都是有且仅有的唯一的一次赋值。

二.关于修饰符权限问题

1.四种权限修饰符:public > protected > (default) >private

                同一类中      V               V             V               V

                同一个包中   V               V             V               \

                不同包子类中V               V              \               \

                不同包非子类V               \                \               \    

三.关于内部类

1.几种分类:成员内部类,局部内部类,局部内部类中的匿名内部类

2.成员内部类

基本定义格式 修饰符 class 外部类名称{

                                           修饰符 class 内部类名称{

        }

}

注意:内部用外部随意访问,外部使用内部方法等需要创建内部类对象

外部使用成员内部类的方法:直接与间接

直接:利用公式:外部类名称.内部类名称 对象名称 = new 外部类名称().new 内部类名称();

间接:先创建外部类对象,调用外部类方法,方法里面间接使用内部类方法(使用时可以选择匿名创建内部类对象)

外部类某变量与内部类某变量重名问题:局部变量遵循就近原则,外部类名称.this.变量名称(内部调用外部类的成员变量)

外部类只能写public 与 (default)

3.局部内部类

定义在方法体里面的类就是局部内部类。局部内部类不能写权限修饰符!

局部内部类若是想访问方法体中的局部变量,那么这个变量必须是有效final

原因在生存周期问题:局部变量是在栈内存中,方法体在方法区中,new出来的对象在堆内存中,局部变量在方法结束后会立即出栈,而堆内存中的对象会持续存在,直到垃圾回收为止。

4.局部内部类中的匿名内部类

匿名的存在意义:只用一次,节省内存提升运行效率。后期lambda表达式经常用!

(接口名称 对象名称 = )new 接口名称(){

};

5.类作为成员变量的类型:String 其实式lang包下的一个类。

所以我们也可以自己定义一个类比如weapon,在另外一个类正常定义即可

package Practice;

public class Legendes {
    private String name;
    private int age;
    private Weapon weapon;

    void attack(){
        System.out.println("年龄为" + age + "的" + name + "正在使用" +weapon.getCode() + "攻击敌方小卡拉米");
    }
    public Ledges() {
    }

    public Ledges(String name, int age, Weapon weapon) {
        this.name = name;
        this.age = age;
        this.weapon = weapon;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Weapon getWeapon() {
        return weapon;
    }

    public void setWeapon(Weapon weapon) {
        this.weapon = weapon;
    }
}

6.接口也可以作为成员变量类型。

集合刚才讲的关于匿名局部内部类,接口的实现类若是只用一次,完全可以在方法里面就给他实现了

import SkillImp;
public class Legends{
    public static void main(){
    Legends legends = new Legends();
    lengends.setName("dz");
    //lengends.setSkill(new SkillImp());//1.定义一个接口skill,实现类是skillImp
    lengends.setSkill(new Skill(){
        @override
        public void use(){System.out.println("这里是实现类的方法,是匿名内部类作为实现类")}
        };


    )

 }

}

7.接口同样能作为返回值和参数列表

思考:ArrayList这个类里面就是存在接口List,那么我们用多态的写法:

List<String> list = new ArrayList <String>();

package Practice;

import java.util.ArrayList;
import java.util.List;

public class DemoList {
    public static void main(String[] args) {
        List <String> list = new ArrayList<>();
        List <String> result = newListMethod(list);
        for (int i = 0; i < result.size(); i++) {
            System.out.println(result.get(i));
        }

    }

     public static List<String> newListMethod(List<String> newList){
        newList.add("健字号");
        newList.add("顶真");
        newList.add("怪零");
        return newList;
    }


}

注意:有返回就一定要有接受!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值