Java学习_Day11
Java学习第十一天内容:
一、final关键字
二、权限修饰符
三、内部类
一、final关键字
final(最终的):可以修饰类、方法、变量
- final关键字用来修饰一个类–>表明该类没有子类(或者不能用final修饰的类作为父类)所以其中的所有方法都不能被重写,当然在final修饰的类中可以重写其父类的方法;
- final修饰发方法–>该方法不能被重写;
final和abstract不能共存(final修饰的方法是不能被重写,而abstract修饰的方法必须要被重写,所以二者冲突) - final修饰变量
1).final修饰局部变量:被final修饰的变量,只能被赋值一次,不可再被更改
final int num = 10;//num的值固定为10,不能被再次更改
修饰引用变量–>其存储的指向对象的地址不可更改,但对象里面的属性可(成员变量)以更改
final Student stu=new Student("高圆圆"); //stu的地址值固定为0x111,地址值不能改变
stu.setName("赵又廷"); //正确
2).final修饰成员变量:成员变量都有默认的值,但是被final关键字修饰的成员变量,没有默认值,必须手动赋值:
赋值的方式有两种:
public class Student{
//1.直接使用=赋值 【推荐写法】
public static final int num=100;
//2.如果没有直接赋值,可以在构造方法中赋值【不推荐】
final int num2;
//final修饰的成员变量,必须在有参构造器和无参构造器中都赋值
public Student(){//无参构造器
this.num2=200;
}
public Student(String name){//有参构造器
this.num2=200;
}
}
二、权限修饰符
public > protected > 默认的(不写) > private
protected(受保护):
被protected修饰的成员,只给子类使用,只能被子类访问(子类和父类是可以跨包的存在的)
默认的(不写,并不是写上default)://接口中才用到default,只是为了区分和普通类中的普通方法做区分
接口interface中的默认方法被public default修饰(public可以被省略)default不是权限修饰符,只是一种关键字只起到区分接口中的普通方法和普通类中的普通方法
被默认权限修饰的成员,只能在同一个包中使用
权限修饰符是用来修饰类的成员的(成员变量、成员方法、构造方法、成员内部类)
三、内部类
解释:定义在类内部的类,根据在类中的位置不同分为两种
内部类又可以定义自己的方法
内部类和外部类并非继承关系
1.成员内部类
成员内部类–>在类的方法外面,类里面和类的成员变量同等级
成员内部类可以添加任何权限修饰符
注意:创建内部类对象的格式以及调用内部类方法的2种方式:
2.局部内部类(包含匿名内部类)
只在其所定义的这个方法中有效
定义在方法里面的类-和方法的变量–>局部变量同等级所以叫局部内部类
局部内部类定义格式以及外部类,内部类的权限修饰符的选择:
public class Outer{
public void show(){
//局部变量:只能在所在的方法中使用
int num=10;
//局部内部类: 只在所定义的方法中有效
class Inner{
public void inShow(){
System.out.println("in..show");
}
}
Inner in=new Inner();
in.inShow();
}
}
匿名内部类【最重要】
1)前提:要抽象类\接口
2)格式:
new 抽象类\接口(){//不添加权限修饰符
复写所有的抽象方法
}
匿名内部类的使用:
3)本质:匿名内部类是类,【同时也是抽象类或者接口的子类对象】
4)匿名内部类好处:
是如果一个类只被用一次,就通过匿名内部类来使用,不用单独为之创建一个类和.java文件,简化了开发过程
外部类同一用public权限修饰符修饰
成员变量都是有默认值的
类的成员变量可以是任意数据类型–>(还可以是接口,抽象类作为另一个类的成员变量)
类就是用来模拟事物
对Java中四种权限修饰符的理解:Java学习第12天内容链接:
https://blog.csdn.net/LJN951118/article/details/89061910