JAVA学习历程记录(一)
final
final修饰的数据*称为常量,定义之后不能修改
final int a = 10;
a = 50;
这里第二行的a就会显示编译错误
【补充】这里String定义的变量就是常量
final修饰的变量必须在创建对象成功之前和类加载成功之前赋值成功
final修饰的方法可以被继承,但是不能被重写和隐藏
final修饰的类不能被继承
抽象类
public class Example{
public void a(){
}
public abstract void b()[
}
}
public class Example2 extends Example1{
public void b() {
}
被抽象类修饰方法必须在抽象类子类中被实现
接口
public interface Cal {
public abstract double getArea();
}
public class Circle implements Cal {
public double getArea(){
return 0;
}
接口不是类
接口中的方法是抽象方法(但在sdk1.8中接口中的方法可以有方法体)
接口不能实例化,不能有构造方法
用接口声明对象,用接口的实现类创建向上对象
接口可以存在多继承多实现
【补充】为什么编译期间,任何一个接口都可以强转
因为多态,java多态可以实现向上造型,普通的父类声明,子类创建对象,java编译器可以很快摸清楚类与类之间的关系,但是接口是多继承与多实现的关系,就导致这部分的计算过于庞大,java编译器难以完成这部分的任务,所以就直接允许接口可以强转,运行出错后让程序员自行修改。
内部类
局部/方法内部类
定义在方法中的类
只能被abstract,final修饰
可以使用外部类的一切属性和方法
不可以定义静态变量和静态方法
可以继承和实现
如果局部内部类使用了当前方法中的数据,那么这个数据就默认了常量
成员内部类
定义在类中方法外的类
可以被修饰符修饰
可以使用外部类中的属性和方法
不可以定义静态变量和静态方法
静态内部类
使用static修饰的内部类
只能使用外部类的静态属性和静态方法
可以定义任意的变量和方法
匿名内部类
没有名字的内部类