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

一.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;
    }


}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值